Java 类net.minecraft.util.math.RayTraceResult.Type 实例源码
项目:BetterPlacement
文件:BetterPlacement.java
@SubscribeEvent
public static void onClientTick(ClientTickEvent event) throws Throwable {
if (event.phase == Phase.START && (!Configs.creativeOnly || Minecraft.getMinecraft().player.isCreative())) {
int timer = (int) getDelayTimer.invoke(Minecraft.getMinecraft());
RayTraceResult hover = Minecraft.getMinecraft().objectMouseOver;
if (hover != null && hover.typeOfHit == Type.BLOCK) {
BlockPos pos = hover.getBlockPos();
if (timer > 0 && !pos.equals(lastTargetPos) && (lastTargetPos == null || !pos.equals(lastTargetPos.offset(lastTargetSide)))) {
setDelayTimer.invoke(Minecraft.getMinecraft(), 0);
} else if (Configs.forceNewLoc && timer == 0 && pos.equals(lastTargetPos) && hover.sideHit == lastTargetSide) {
setDelayTimer.invoke(Minecraft.getMinecraft(), 4);
}
lastTargetPos = pos.toImmutable();
lastTargetSide = hover.sideHit;
}
}
}
项目:Bewitchment
文件:ItemSpellPage.java
@Override
public ItemStack onItemUseFinish(ItemStack stack, World worldIn, EntityLivingBase entityLiving) {
Spell spell = getSpellFromItemStack(stack);
if (spell != null && !worldIn.isRemote) {
if (entityLiving instanceof EntityPlayer) {
int spellCost = spell.getCost() * 80;
Optional<IEnergy> eng = EnergyHandler.getEnergy((EntityPlayer) entityLiving);
if (eng.isPresent() && eng.get().get() < spellCost)
return stack;
EnergyHandler.addEnergy((EntityPlayer) entityLiving, -spellCost);
}
if (spell.getType() == EnumSpellType.INSTANT)
spell.performEffect(new RayTraceResult(Type.MISS, entityLiving.getLookVec(), EnumFacing.UP, entityLiving.getPosition()), entityLiving, worldIn);
else {
EntitySpellCarrier car = new EntitySpellCarrier(worldIn, entityLiving.posX + entityLiving.getLookVec().x, entityLiving.posY + entityLiving.getEyeHeight() + entityLiving.getLookVec().y, entityLiving.posZ + entityLiving.getLookVec().z);
car.setSpell(spell);
car.setCaster(entityLiving);
car.shoot(entityLiving, entityLiving.rotationPitch, entityLiving.rotationYaw, 0, 2f, 0);
worldIn.spawnEntity(car);
}
}
if (entityLiving instanceof EntityPlayer && ((EntityPlayer) entityLiving).isCreative()) return stack;
return ItemStack.EMPTY;
}
项目:Bewitchment
文件:SpellDisarming.java
@Override
public void performEffect(RayTraceResult rtrace, EntityLivingBase caster, World world) {
if (rtrace.typeOfHit == Type.ENTITY && rtrace.entityHit instanceof EntityLivingBase) {
EntityLivingBase entity = (EntityLivingBase) rtrace.entityHit;
EnumHand hand = null;
if (!entity.getHeldItemMainhand().isEmpty()) hand = EnumHand.MAIN_HAND;
else if (!entity.getHeldItemOffhand().isEmpty()) hand = EnumHand.OFF_HAND;
if (hand != null) {
ItemStack stack = entity.getHeldItem(hand).copy();
entity.setHeldItem(hand, ItemStack.EMPTY);
if (!(entity instanceof EntityPlayer) && stack.isItemStackDamageable() && stack.getItemDamage() == 0) {
stack.setItemDamage((int) (stack.getMaxDamage() * (0.5D + 0.5D * Math.random())));
}
EntityItem ei = new EntityItem(world, entity.posX, entity.posY, entity.posZ, stack);
ei.setPickupDelay(200);
ei.setNoDespawn();
if (!world.isRemote) world.spawnEntity(ei);
}
}
}
项目:SimplyTea
文件:SimplyTea.java
@Override
public ActionResult<ItemStack> onItemRightClick(World worldIn, EntityPlayer playerIn, EnumHand handIn){
ItemStack stack = playerIn.getHeldItem(handIn);
if (stack.getMetadata() == 0){
RayTraceResult raytraceresult = this.rayTrace(worldIn, playerIn, true);
if (raytraceresult != null && raytraceresult.typeOfHit != null && raytraceresult.typeOfHit == Type.BLOCK){
IBlockState state = worldIn.getBlockState(raytraceresult.getBlockPos());
if (state.getBlock() == Blocks.WATER){
stack.setItemDamage(1);
playerIn.setHeldItem(handIn, stack);
return new ActionResult<ItemStack>(EnumActionResult.SUCCESS,stack);
}
}
}
return new ActionResult<ItemStack>(EnumActionResult.FAIL,stack);
}
项目:SimplyTea
文件:SimplyTea.java
@Override
public void generate(Random random, int chunkX, int chunkZ, World world, IChunkGenerator chunkGenerator,
IChunkProvider chunkProvider) {
if (random.nextInt(20) == 0){
int x = chunkX * 16 + 2 + random.nextInt(12);
int z = chunkZ * 16 + 2 + random.nextInt(12);
BlockPos p = new BlockPos(x,0,z);
p = world.getHeight(p);
Biome b = world.getBiome(p);
if (BiomeDictionary.hasType(b, BiomeDictionary.Type.FOREST) || b == Biomes.FOREST || b == Biomes.FOREST_HILLS){
if (world.getBlockState(p.down()).getBlock() instanceof BlockGrass && world.isAirBlock(p)){
BlockTeaSapling.generateTree(world, p, Blocks.AIR.getDefaultState(), random);
}
}
}
}
项目:WirelessRedstone
文件:WirelessBolt.java
private float rayTraceResistance(Vector3 start, Vector3 end, float prevresistance) {
RayTraceResult hit = world.rayTraceBlocks(start.vec3(), end.vec3());
if (hit == null)
return prevresistance;
if (hit.typeOfHit == Type.BLOCK) {
IBlockState state = world.getBlockState(hit.getBlockPos());
if (state.getBlock().isAir(state, world, hit.getBlockPos()))
return prevresistance;
/*if(Block.blocksList[blockID] instanceof ISpecialResistance)
{
ISpecialResistance isr = (ISpecialResistance) Block.blocksList[blockID];
return prevresistance + (isr.getSpecialExplosionResistance(world, hit.blockX, hit.blockY, hit.blockZ,
start.x, start.y, start.z, wrapper) + 0.3F);
}
else
{*/
return prevresistance + state.getBlock().getExplosionResistance(wrapper) + 0.3F;
//}
}
return prevresistance;
}
项目:ExPetrum
文件:EntityThrownWeapon.java
@Override
protected void onImpact(RayTraceResult result)
{
if (result.typeOfHit == Type.ENTITY && result.entityHit != null)
{
result.entityHit.attackEntityFrom(this.createDamageSource(), this.getDamage());
}
else
{
if (result.typeOfHit == Type.BLOCK)
{
BlockPos blockpos = result.getBlockPos();
IBlockState iblockstate = this.world.getBlockState(blockpos);
this.inGround = true;
this.reflectImpactTileData(result.getBlockPos());
if (iblockstate.getMaterial() != Material.AIR)
{
iblockstate.getBlock().onEntityCollidedWithBlock(this.world, blockpos, iblockstate, this);
}
}
}
}
项目:Aether-Legacy
文件:EntityHammerProjectile.java
@Override
protected void onImpact(RayTraceResult result)
{
if (result.typeOfHit == Type.ENTITY && result.entityHit != this.getThrower())
{
result.entityHit.attackEntityFrom(DamageSource.causeIndirectDamage(this, this.getThrower()), 5);
result.entityHit.addVelocity(this.motionX, 0.6D, this.motionZ);
if (this.getThrower() != null && result.entityHit != this.getThrower() && result.entityHit instanceof EntityPlayer && this.getThrower() instanceof EntityPlayerMP)
{
((EntityPlayerMP)this.getThrower()).connection.sendPacket(new SPacketChangeGameState(6, 0.0F));
}
}
for(int j = 0; j < 8; j++)
{
this.worldObj.spawnParticle(EnumParticleTypes.EXPLOSION_NORMAL, this.posX, this.posY, this.posZ, 0.0D, 0.0D, 0.0D);
this.worldObj.spawnParticle(EnumParticleTypes.EXPLOSION_NORMAL, this.posX, this.posY, this.posZ, 0.0D, 0.0D, 0.0D);
this.worldObj.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, this.posX, this.posY, this.posZ, 0.0D, 0.0D, 0.0D);
this.worldObj.spawnParticle(EnumParticleTypes.SMOKE_LARGE, this.posX, this.posY, this.posZ, 0.0D, 0.0D, 0.0D);
this.worldObj.spawnParticle(EnumParticleTypes.FLAME, this.posX, this.posY, this.posZ, 0.0D, 0.0D, 0.0D);
}
this.setDead();
}
项目:Aether-Legacy
文件:EntityZephyrSnowball.java
@Override
protected void onImpact(RayTraceResult result)
{
if (result.typeOfHit == Type.ENTITY)
{
Entity entity = result.entityHit;
if (entity instanceof EntityPlayer)
{
EntityPlayer player = ((EntityPlayer)entity);
if (player.inventory.armorInventory[0] != null && player.inventory.armorInventory[0].getItem() == ItemsAether.sentry_boots)
{
return;
}
}
result.entityHit.motionX += this.motionX * 1.5F;
result.entityHit.motionY += 0.5D;
result.entityHit.motionZ += this.motionZ * 1.5F;
}
this.setDead();
}
项目:blockbuster
文件:ActionHandler.java
/**
* Event listener for bucket using. When you place water or lava with
* bucket it doesn't considered place block action like with any other
* types of blocks.
*
* So here's my hack for placing water and lava blocks.
*/
@SubscribeEvent
public void onPlayerUseBucket(FillBucketEvent event)
{
EntityPlayer player = event.getEntityPlayer();
List<Action> events = CommonProxy.manager.getActions(player);
RayTraceResult target = event.getTarget();
if (!player.worldObj.isRemote && events != null && target != null && target.typeOfHit == Type.BLOCK)
{
Item bucket = event.getEmptyBucket().getItem();
BlockPos pos = target.getBlockPos().offset(target.sideHit);
if (bucket == Items.LAVA_BUCKET)
{
this.placeBlock(events, pos, Blocks.FLOWING_LAVA, 0);
}
else if (bucket == Items.WATER_BUCKET)
{
this.placeBlock(events, pos, Blocks.FLOWING_WATER, 0);
}
}
}
项目:DungeonDimension
文件:EntityCorruptedSlime.java
@Override
protected void onImpact(RayTraceResult result){
if(result.typeOfHit == Type.BLOCK && !worldObj.isRemote){
if(worldObj.getBlockState(result.getBlockPos()) != null && worldObj.getBlockState(result.getBlockPos()).getBlock() == Blocks.GRAVEL){
worldObj.setBlockState(result.getBlockPos(), DungeonDimension.corruption.getDefaultState());
}
}else if (result.entityHit != null){
if(result.entityHit instanceof EntityLivingBase){
EntityLivingBase ent = (EntityLivingBase) result.entityHit;
if(ent instanceof EntityPlayer) ent.addPotionEffect(new PotionEffect(MobEffects.HUNGER, 10*20, 1));
ent.addPotionEffect(new PotionEffect(MobEffects.POISON, 2*20, 1));
}
}
for (int j = 0; j < 8; ++j){
this.worldObj.spawnParticle(EnumParticleTypes.ITEM_CRACK, this.posX, this.posY, this.posZ, 0.0D, 0.0D, 0.0D, new int[]{Item.getIdFromItem(DungeonDimension.corruptionslime)});
}
if (!this.worldObj.isRemote){
this.setDead();
}
setDead();
}
项目:TaleCraft
文件:EntityBullet.java
@Override
protected void onImpact(RayTraceResult result) {
if (world.isRemote)
return;
boolean kill = true;
if (result.typeOfHit == Type.ENTITY) {
Entity ent = result.entityHit;
if (ent instanceof EntityPlayerMP) {
kill = false;
} else
ent.attackEntityFrom(
(new EntityDamageSource("arrow", getThrower())).setProjectile(),
damage);
}
if (result.typeOfHit == Type.BLOCK) {
if (!world.getBlockState(result.getBlockPos()).isFullBlock()) {
kill = false;
}
}
if (kill)
setDead();
}
项目:TaleCraft
文件:EntityBoomerang.java
@Override
protected void onImpact(RayTraceResult result) {
if (world.isRemote)
return;
if (result.typeOfHit == Type.ENTITY) {
Entity ent = result.entityHit;
if (ent == getThrower()) {
setDead();
} else {
ent.attackEntityFrom(
DamageSource.causeIndirectDamage(this, getThrower()), 4F);
}
} else {
if (isReturning) {
setDead();
} else {
returnToThrower();
}
}
}
项目:TaleCraft
文件:CustomPaintingRender.java
@Override
public void render(Item item, ItemStack stack, Tessellator tessellator, BufferBuilder buffer, double partialTick, BlockPos playerPos, EntityPlayerSP player, WorldClient world) {
EnumArt painting = EnumArt.valueOf(stack.getTagCompound().getString("art"));
RayTraceResult result = player.rayTrace(5, (float)partialTick);
if(result.typeOfHit == Type.BLOCK){
BlockPos pos = result.getBlockPos();
EnumFacing facing = result.sideHit;
if(!facing.getAxis().isHorizontal())return;
EntityPainting ent = new EntityPainting(world, pos.offset(facing.getOpposite(), 1), facing);
ent.art = painting;
GlStateManager.enableBlend();
GL11.glColor4f(1f, 1f, 1f, 0.5f);
double xMove = 0;
if(facing.getFrontOffsetX() == 0)xMove = (painting.sizeX != 32 ? painting.sizeX >= 48 ? -painting.sizeX/16/8 : 0.5 : 0);
double zMove = 0;
if(facing.getFrontOffsetZ() == 0)zMove = (painting.sizeX != 32 ? painting.sizeX >= 48 ? -painting.sizeX/16/8 : 0.5 : 0);
if(painting.sizeX == 16){
if(facing.getOpposite() == EnumFacing.EAST)zMove -= 1;
if(facing.getOpposite() == EnumFacing.NORTH)xMove -= 1;
}
double yMove = (painting.sizeY == 16 || painting.sizeY == 16*3 ? 0 : 0.5);
RENDER.doRender(ent, ent.posX + facing.getFrontOffsetX()*2 + xMove, ent.posY + yMove, ent.posZ + facing.getFrontOffsetZ()*2 + zMove, ent.rotationYaw, (float)partialTick);
}
}
项目:TaleCraft
文件:NPCEditorItem.java
@Override
public ActionResult<ItemStack> onItemRightClick(World world, EntityPlayer player, EnumHand hand) {
// ItemStack stack = player.getHeldItem(hand);
float lerp = 1F;
float dist = 7;
Vec3d start = this.getPositionEyes(lerp, player);
Vec3d direction = player.getLook(lerp);
Vec3d end = start.addVector(direction.xCoord * dist, direction.yCoord * dist, direction.zCoord * dist);
RayTraceResult result = world.rayTraceBlocks(start, end, false, false, false);
if(result.typeOfHit == Type.BLOCK){
spawnNPC(world, result.getBlockPos());
if(!world.isRemote) player.sendMessage(new TextComponentString("NPC spawned!"));
}
return super.onItemRightClick(world, player, hand);
}
项目:TaleCraft
文件:TriggerItem.java
@Override
public ActionResult<ItemStack> onItemRightClick(World world, EntityPlayer player, EnumHand hand) {
ItemStack stack = player.getHeldItem(hand);
if(world.isRemote)
return ActionResult.newResult(EnumActionResult.PASS, stack);
if(stack.hasTagCompound()){
NBTTagCompound tag = stack.getTagCompound();
EnumTriggerState state = EnumTriggerState.values()[tag.getInteger("trigger")];
float lerp = 1F;
float dist = 6;
Vec3d start = this.getPositionEyes(lerp, player);
Vec3d direction = player.getLook(lerp);
Vec3d end = start.addVector(direction.xCoord * dist, direction.yCoord * dist, direction.zCoord * dist);
RayTraceResult result = world.rayTraceBlocks(start, end, false, false, false);
if(result != null && result.typeOfHit != null && result.typeOfHit == Type.BLOCK){
BlockPos pos = result.getBlockPos();
Block block = world.getBlockState(pos).getBlock();
if(block instanceof TCITriggerableBlock){
((TCITriggerableBlock)block).trigger(world, pos, state);
return ActionResult.newResult(EnumActionResult.PASS, stack);
}
}
}
return ActionResult.newResult(EnumActionResult.SUCCESS, stack);
}
项目:AbyssalCraft
文件:AbyssalCraftClientEventHooks.java
@SubscribeEvent
public void onMouseEvent(MouseEvent event) {
int button = event.getButton() - 100;
Minecraft mc = Minecraft.getMinecraft();
EntityPlayer player = mc.player;
World world = mc.world;
int key = mc.gameSettings.keyBindAttack.getKeyCode();
if (button == key && Mouse.isButtonDown(button + 100))
if(mc.objectMouseOver != null && mc.objectMouseOver.typeOfHit == Type.BLOCK){
BlockPos pos = mc.objectMouseOver.getBlockPos();
EnumFacing face = mc.objectMouseOver.sideHit;
if(pos != null && face != null)
if (world.getBlockState(pos).getBlock() != null)
extinguishFire(player, pos, face, world, event);
}
}
项目:AbyssalCraft
文件:EntropySpell.java
@Override
protected void castSpellServer(World world, BlockPos pos, EntityPlayer player) {
RayTraceResult r = rayTrace(player, world, 16, 1);
if(r != null && r.typeOfHit == Type.BLOCK){
IBlockState state = getDegradation(world.getBlockState(r.getBlockPos()));
if(state != null && world.isBlockModifiable(player, r.getBlockPos())){
world.destroyBlock(r.getBlockPos(), false);
world.setBlockState(r.getBlockPos(), state);
AbyssalCraftAPI.getInternalMethodHandler().spawnPEStream(pos, r.getBlockPos(), world.provider.getDimension());
for(int i = 0; i < 9; i++){
ItemStack stack = player.inventory.getStackInSlot(i);
if(stack.getItem() instanceof IEnergyContainerItem){
((IEnergyContainerItem)stack.getItem()).addEnergy(stack, 5 + world.rand.nextInt(5));
break;
}
}
}
}
}
项目:AbyssalCraft
文件:MiningSpell.java
@Override
protected void castSpellServer(World world, BlockPos pos, EntityPlayer player) {
RayTraceResult r = rayTrace(player, world, 16, 1);
if(r != null && r.typeOfHit == Type.BLOCK)
for(int i = 0; i < 3; i++)
for(BlockPos pos2 : getPositions(r.getBlockPos().offset(r.sideHit.getOpposite(), i), r.sideHit.getOpposite())){
IBlockState state = getRemains(world.getBlockState(pos2));
if(state != null && world.isBlockModifiable(player, pos2)){
if(i == 0)
world.destroyBlock(pos2, false);
world.setBlockState(pos2, state);
}
}
}
项目:SecurityCraft
文件:EntityTaserBullet.java
@Override
protected void onImpact(RayTraceResult par1RayTraceResult)
{
if(!worldObj.isRemote)
if(par1RayTraceResult.typeOfHit == Type.ENTITY)
{
if(par1RayTraceResult.entityHit instanceof EntityPlayer)
if(((EntityPlayer)par1RayTraceResult.entityHit).capabilities.isCreativeMode || (EntityLivingBase)par1RayTraceResult.entityHit == getThrower())
return;
if(par1RayTraceResult.entityHit instanceof EntityLivingBase)
{
((EntityLivingBase) par1RayTraceResult.entityHit).attackEntityFrom(DamageSource.generic, 1F);
((EntityLivingBase) par1RayTraceResult.entityHit).addPotionEffect(new PotionEffect(Potion.getPotionFromResourceLocation("weakness"), 500, 2));
((EntityLivingBase) par1RayTraceResult.entityHit).addPotionEffect(new PotionEffect(Potion.getPotionFromResourceLocation("nausea"), 500, 2));
((EntityLivingBase) par1RayTraceResult.entityHit).addPotionEffect(new PotionEffect(Potion.getPotionFromResourceLocation("slowness"), 500, 2));
setDead();
}
}
}
项目:SecurityCraft
文件:EntityTaserBullet.java
@Override
protected void onImpact(RayTraceResult par1RayTraceResult)
{
if(!world.isRemote)
if(par1RayTraceResult.typeOfHit == Type.ENTITY)
{
if(par1RayTraceResult.entityHit instanceof EntityPlayer)
if(((EntityPlayer)par1RayTraceResult.entityHit).capabilities.isCreativeMode || (EntityLivingBase)par1RayTraceResult.entityHit == getThrower())
return;
if(par1RayTraceResult.entityHit instanceof EntityLivingBase)
{
((EntityLivingBase) par1RayTraceResult.entityHit).attackEntityFrom(DamageSource.GENERIC, 1F);
((EntityLivingBase) par1RayTraceResult.entityHit).addPotionEffect(new PotionEffect(Potion.getPotionFromResourceLocation("weakness"), 500, 2));
((EntityLivingBase) par1RayTraceResult.entityHit).addPotionEffect(new PotionEffect(Potion.getPotionFromResourceLocation("nausea"), 500, 2));
((EntityLivingBase) par1RayTraceResult.entityHit).addPotionEffect(new PotionEffect(Potion.getPotionFromResourceLocation("slowness"), 500, 2));
setDead();
}
}
}
项目:SecurityCraft
文件:EntityTaserBullet.java
@Override
protected void onImpact(RayTraceResult par1RayTraceResult)
{
if(!world.isRemote)
if(par1RayTraceResult.typeOfHit == Type.ENTITY)
{
if(par1RayTraceResult.entityHit instanceof EntityPlayer)
if(((EntityPlayer)par1RayTraceResult.entityHit).capabilities.isCreativeMode || (EntityLivingBase)par1RayTraceResult.entityHit == getThrower())
return;
if(par1RayTraceResult.entityHit instanceof EntityLivingBase)
{
((EntityLivingBase) par1RayTraceResult.entityHit).attackEntityFrom(DamageSource.GENERIC, 1F);
((EntityLivingBase) par1RayTraceResult.entityHit).addPotionEffect(new PotionEffect(Potion.getPotionFromResourceLocation("weakness"), 500, 2));
((EntityLivingBase) par1RayTraceResult.entityHit).addPotionEffect(new PotionEffect(Potion.getPotionFromResourceLocation("nausea"), 500, 2));
((EntityLivingBase) par1RayTraceResult.entityHit).addPotionEffect(new PotionEffect(Potion.getPotionFromResourceLocation("slowness"), 500, 2));
setDead();
}
}
}
项目:ControlPack
文件:ControlPackMain.java
public void runAutoTool(boolean proactive) {
// proactive means we're doing this before the keybinding is even logged yet.
// currently mining? and not using swap command?
if (swappedInventoryState == 0 && (proactive || mc.gameSettings.keyBindAttack.isKeyDown()) && mc.objectMouseOver != null) {
// get the block being targetted
if (!mc.playerController.isInCreativeMode() && ControlPackOptions.booleanOptions.get(ControlPackEnumOptions.AUTOTOOL) && mc.objectMouseOver.typeOfHit == Type.BLOCK) {
Block block = mc.world.getBlockState(mc.objectMouseOver.getBlockPos()).getBlock();
if (block != null) {
ensureCorrectToolSelected(block);
}
}
else if (ControlPackOptions.booleanOptions.get(ControlPackEnumOptions.AUTOSWORD) && (mc.objectMouseOver.typeOfHit == Type.ENTITY && mc.objectMouseOver.entityHit instanceof EntityLivingBase)) {
ensureSwordSelected();
}
// fyi change item: player.inventory.changeCurrentItem(k);, or player.inventory.currentItem = i;
// mc.objectMouseOver
// objectMouseOver.typeOfHit == EnumMovingObjectType.TILE
// objectMouseOver.typeOfHit == EnumMovingObjectType.ENTITY
// objectMouseOver.blockX,Y,Z
// world.getBlockId(i,j,k)
// Block.blocksList[id]
}
}
项目:ControlPack
文件:ControlPackMain.java
public void runAutoTool(boolean proactive) {
// proactive means we're doing this before the keybinding is even logged yet.
// currently mining? and not using swap command?
if (swappedInventoryState == 0 && (proactive || mc.gameSettings.keyBindAttack.isKeyDown()) && mc.objectMouseOver != null) {
// get the block being targetted
if (!mc.playerController.isInCreativeMode() && ControlPackOptions.booleanOptions.get(ControlPackEnumOptions.AUTOTOOL) && mc.objectMouseOver.typeOfHit == Type.BLOCK) {
Block block = mc.world.getBlockState(mc.objectMouseOver.getBlockPos()).getBlock();
if (block != null) {
ensureCorrectToolSelected(block);
}
}
else if (ControlPackOptions.booleanOptions.get(ControlPackEnumOptions.AUTOSWORD) && (mc.objectMouseOver.typeOfHit == Type.ENTITY && mc.objectMouseOver.entityHit instanceof EntityLivingBase)) {
ensureSwordSelected();
}
// fyi change item: player.inventory.changeCurrentItem(k);, or player.inventory.currentItem = i;
// mc.objectMouseOver
// objectMouseOver.typeOfHit == EnumMovingObjectType.TILE
// objectMouseOver.typeOfHit == EnumMovingObjectType.ENTITY
// objectMouseOver.blockX,Y,Z
// world.getBlockId(i,j,k)
// Block.blocksList[id]
}
}
项目:ControlPack
文件:ControlPackMain.java
public void runAutoTool(boolean proactive) {
// proactive means we're doing this before the keybinding is even logged yet.
// currently mining? and not using swap command?
if (swappedInventoryState == 0 && (proactive || mc.gameSettings.keyBindAttack.isKeyDown()) && mc.objectMouseOver != null) {
// get the block being targetted
if (!mc.playerController.isInCreativeMode() && ControlPackOptions.booleanOptions.get(ControlPackEnumOptions.AUTOTOOL) && mc.objectMouseOver.typeOfHit == Type.BLOCK) {
Block block = mc.world.getBlockState(mc.objectMouseOver.getBlockPos()).getBlock();
if (block != null) {
ensureCorrectToolSelected(block);
}
}
else if (ControlPackOptions.booleanOptions.get(ControlPackEnumOptions.AUTOSWORD) && (mc.objectMouseOver.typeOfHit == Type.ENTITY && mc.objectMouseOver.entityHit instanceof EntityLivingBase)) {
ensureSwordSelected();
}
// fyi change item: player.inventory.changeCurrentItem(k);, or player.inventory.currentItem = i;
// mc.objectMouseOver
// objectMouseOver.typeOfHit == EnumMovingObjectType.TILE
// objectMouseOver.typeOfHit == EnumMovingObjectType.ENTITY
// objectMouseOver.blockX,Y,Z
// world.getBlockId(i,j,k)
// Block.blocksList[id]
}
}
项目:Bewitchment
文件:EntitySpellCarrier.java
@Override
protected void onImpact(RayTraceResult result) {
if (!world.isRemote) {
Spell spell = getSpell();
EntityLivingBase caster = getCaster();
if (spell != null) {
if (result.typeOfHit != Type.ENTITY || result.entityHit != caster)
spell.performEffect(result, caster, world);
if (result.typeOfHit == Type.BLOCK && (spell.getType() == EnumSpellType.PROJECTILE_BLOCK || spell.getType() == EnumSpellType.PROJECTILE_ALL))
this.setDead();
if (result.typeOfHit == Type.ENTITY && (spell.getType() == EnumSpellType.PROJECTILE_ENTITY || spell.getType() == EnumSpellType.PROJECTILE_ALL) && result.entityHit != caster)
this.setDead();
} else Bewitchment.logger.warn("Spell is null for " + this + " with spell reg name of " + getSpellName());
}
}
项目:Bewitchment
文件:ItemSpellPage.java
public ItemSpellPage(String id) {
super(id);
this.setMaxStackSize(1);
this.setHasSubtypes(true);
BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject(this, new IBehaviorDispenseItem() {
@Override
public ItemStack dispense(IBlockSource source, ItemStack stack) {
Spell s = ItemSpellPage.getSpellFromItemStack(stack);
if (s != null) {
EnumFacing enumfacing = source.getBlockState().getValue(BlockDispenser.FACING);
Vec3d lookVect = new Vec3d(enumfacing.getDirectionVec());
if (s.canBeUsed(source.getWorld(), source.getBlockPos().offset(enumfacing), null)) {
if (s.getType() == EnumSpellType.INSTANT)
s.performEffect(new RayTraceResult(Type.MISS, lookVect, EnumFacing.UP, source.getBlockPos()), null, source.getWorld());
else {
EntitySpellCarrier car = new EntitySpellCarrier(source.getWorld(), source.getBlockPos().getX() + 1.5 * lookVect.x + 0.5, source.getBlockPos().getY() + 0.5d + lookVect.y, source.getBlockPos().getZ() + 1.5 * lookVect.z + 0.5);
car.setSpell(s);
car.setCaster(null);
car.shoot(car, 0, enumfacing.getHorizontalAngle(), 0, 1f, 0);
source.getWorld().spawnEntity(car);
}
return ItemStack.EMPTY;
}
}
return stack;
}
});
}
项目:Bewitchment
文件:SpellInfuseLife.java
@Override
public void performEffect(RayTraceResult rtrace, EntityLivingBase caster, World world) {
if (caster != null && rtrace.typeOfHit == Type.ENTITY && rtrace.entityHit instanceof EntityLivingBase) {
caster.attackEntityFrom(DamageSource.causeIndirectMagicDamage(caster, null), 1f);
((EntityLivingBase) rtrace.entityHit).heal(1f);
}
}
项目:Bewitchment
文件:SpellPoke.java
@Override
public void performEffect(RayTraceResult rtrace, EntityLivingBase caster, World world) {
if (rtrace.typeOfHit == Type.ENTITY && rtrace.entityHit instanceof EntityLivingBase) {
if (caster != null)
rtrace.entityHit.attackEntityFrom(new EntityDamageSource(DamageSource.MAGIC.getDamageType(), caster), 1f);
else rtrace.entityHit.attackEntityFrom(DamageSource.MAGIC, 0.5f);
}
}
项目:Bewitchment
文件:SpellMagnet.java
@Override
public void performEffect(RayTraceResult rtrace, EntityLivingBase caster, World world) {
if (rtrace.typeOfHit == Type.BLOCK && caster != null) {
world.getEntitiesWithinAABB(EntityItem.class, new AxisAlignedBB(rtrace.hitVec, rtrace.hitVec.addVector(1, 1, 1)).grow(2)).forEach(ei -> {
ei.setNoPickupDelay();
if (caster instanceof EntityPlayer) {
ei.onCollideWithPlayer((EntityPlayer) caster);
} else {
ei.setPositionAndUpdate(caster.posX, caster.posY, caster.posZ);
}
});
}
}
项目:Bewitchment
文件:SpellBlink.java
@Override
public void performEffect(RayTraceResult rtrace, EntityLivingBase caster, World world) {
if (caster != null && rtrace.typeOfHit == Type.BLOCK) {
BlockPos dest = rtrace.getBlockPos().offset(EnumFacing.UP);
caster.attemptTeleport(dest.getX() + 0.5, dest.getY() + 0.5, dest.getZ() + 0.5);
}
}
项目:Bewitchment
文件:SpellActivation.java
@Override
public void performEffect(RayTraceResult rtrace, EntityLivingBase caster, World world) {
if (rtrace.typeOfHit == Type.BLOCK) {
Block block = world.getBlockState(rtrace.getBlockPos()).getBlock();
if ((caster == null || caster instanceof EntityPlayer) && (block instanceof BlockButton || block instanceof BlockLever || block instanceof BlockDoor || block instanceof BlockTrapDoor)) {
block.onBlockActivated(world, rtrace.getBlockPos(), world.getBlockState(rtrace.getBlockPos()), (EntityPlayer) caster, EnumHand.MAIN_HAND, rtrace.sideHit, 0.5f, 0.5f, 0.5f);
}
}
}
项目:Bewitchment
文件:SpellWater.java
@Override
public void performEffect(RayTraceResult rtrace, EntityLivingBase caster, World world) {
if (rtrace.typeOfHit == Type.BLOCK) {
BlockPos pos = rtrace.getBlockPos().offset(rtrace.sideHit);
if (world.isAirBlock(pos)) world.setBlockState(pos, Blocks.WATER.getDefaultState(), 3);
}
}
项目:Wurst-MC-1.12
文件:NukerMod.java
@Override
public void onLeftClick(LeftClickEvent event)
{
// check hitResult
if(mc.objectMouseOver == null
|| mc.objectMouseOver.getBlockPos() == null
|| mc.objectMouseOver.typeOfHit != Type.BLOCK)
return;
// set id
if(mode.getSelected() == Mode.ID.ordinal())
id = WBlock.getId(mc.objectMouseOver.getBlockPos());
}
项目:PowerProbe
文件:MouseReleaseHandler.java
private void updateTargetedBlock() {
targetBlockPos = null;
targetBlockSide = null;
EntityPlayerSP player = Minecraft.getMinecraft().player;
double distance = Minecraft.getMinecraft().playerController.getBlockReachDistance();
RayTraceResult r = RayTracer.rayTrace(player, distance, 1, false);
if (r != null && Type.BLOCK.equals(r.typeOfHit)) {
targetBlockPos = r.getBlockPos();
targetBlockSide = r.sideHit;
}
}
项目:ExPetrum
文件:ExPHandlerServer.java
@SubscribeEvent
public void onRightClick(PlayerInteractEvent.RightClickBlock event)
{
if (!event.getWorld().isRemote)
{
EntityPlayer player = event.getEntityPlayer();
IExPPlayer data = IExPPlayer.of(player);
if (data.getThirst() < data.getMaxThirst(true) - 200)
{
RayTraceResult rtr = event.getWorld().rayTraceBlocks(player.getPositionEyes(1), player.getPositionEyes(1).add(player.getLook(1).scale(3)), true, false, false);
if (rtr != null && rtr.typeOfHit == Type.BLOCK)
{
BlockPos pos = rtr.getBlockPos();
IBlockState hit = event.getWorld().getBlockState(pos);
if (hit.getBlock() instanceof IWater && !((IWater)hit.getBlock()).isSalt(event.getWorld(), pos))
{
int level = hit.getValue(BlockFluidBase.LEVEL);
if (level > 0)
{
event.getWorld().setBlockState(pos, hit.withProperty(BlockFluidBase.LEVEL, level - 1));
}
else
{
event.getWorld().setBlockToAir(pos);
}
data.setThirst(data.getThirst() + 200, true);
event.getWorld().playSound(null, pos, SoundEvents.ENTITY_GENERIC_DRINK, SoundCategory.PLAYERS, 1, 1);
}
}
}
}
}
项目:metamorph
文件:Teleport.java
@Override
public void execute(EntityLivingBase target, @Nullable AbstractMorph morph)
{
float reachDistance = 32;
Vec3d pos = new Vec3d(target.posX, target.posY + target.getEyeHeight(), target.posZ);
Vec3d look = target.getLook(1.0F);
Vec3d vec = pos.addVector(look.xCoord * reachDistance, look.yCoord * reachDistance, look.zCoord * reachDistance);
RayTraceResult result = target.worldObj.rayTraceBlocks(pos, vec, false, false, true);
if (result != null && result.typeOfHit == Type.BLOCK)
{
BlockPos block = result.getBlockPos();
if (target instanceof EntityPlayer && ((EntityPlayer) target).getCooledAttackStrength(0.0F) < 1)
{
return;
}
if (target.isSneaking() || !target.worldObj.getBlockState(block.offset(EnumFacing.UP)).getBlock().equals(Blocks.AIR))
{
block = block.offset(result.sideHit);
}
double x = block.getX() + 0.5F;
double y = block.getY() + 1.0F;
double z = block.getZ() + 0.5F;
target.worldObj.playSound(null, target.prevPosX, target.prevPosY, target.prevPosZ, SoundEvents.ENTITY_ENDERMEN_TELEPORT, SoundCategory.HOSTILE, 1.0F, 1.0F);
target.setPositionAndUpdate(x, y, z);
if (target instanceof EntityPlayer)
{
((EntityPlayer) target).resetCooldown();
}
target.worldObj.playSound(null, target.posX, target.posY, target.posZ, SoundEvents.ENTITY_ENDERMEN_TELEPORT, SoundCategory.HOSTILE, 1.0F, 1.0F);
}
}
项目:metamorph
文件:Sliverfish.java
@Override
public void execute(EntityLivingBase target, AbstractMorph morph)
{
if (target.worldObj.isRemote)
{
return;
}
float reachDistance = 5;
Vec3d pos = new Vec3d(target.posX, target.posY + target.getEyeHeight(), target.posZ);
Vec3d look = target.getLook(1.0F);
Vec3d vec = pos.addVector(look.xCoord * reachDistance, look.yCoord * reachDistance, look.zCoord * reachDistance);
RayTraceResult result = target.worldObj.rayTraceBlocks(pos, vec, false, false, true);
if (result != null && result.typeOfHit == Type.BLOCK && target instanceof EntityPlayer)
{
BlockMorph block = new BlockMorph();
block.blockPos = result.getBlockPos();
block.block = target.worldObj.getBlockState(block.blockPos);
block.name = "metamorph.Block";
target.worldObj.setBlockToAir(block.blockPos);
MorphAPI.morph((EntityPlayer) target, block, true);
}
}
项目:Aether-Legacy
文件:EntityLightningKnife.java
@Override
protected void onImpact(RayTraceResult result)
{
if (result.typeOfHit != Type.MISS)
{
EntityLightningBolt lightning = new EntityLightningBolt(this.worldObj, result.hitVec.xCoord, result.hitVec.yCoord, result.hitVec.zCoord, false);
this.worldObj.spawnEntityInWorld(lightning);
}
this.setDead();
}
项目:CodeChickenLib
文件:CustomParticleHandler.java
@SideOnly (Side.CLIENT)
public static void addLandingEffects(World world, BlockPos pos, IBlockState state, Vector3 entityPos, int numParticles) {
//Speshal raytrace, from feet to, down.
Vector3 start = entityPos.copy();
Vector3 end = start.copy().add(Vector3.down.copy().multiply(4));
RayTraceResult traceResult = world.rayTraceBlocks(start.vec3(), end.vec3(), true, false, true);
if (traceResult != null && traceResult.typeOfHit == Type.BLOCK) {
ParticleManager manager = Minecraft.getMinecraft().effectRenderer;
Random randy = new Random();
BlockModelShapes modelProvider = Minecraft.getMinecraft().getBlockRendererDispatcher().getBlockModelShapes();
try {
state = state.getActualState(world, pos);
} catch (Throwable ignored) {
}
IBakedModel model = modelProvider.getModelForState(state);
state = state.getBlock().getExtendedState(state, world, pos);
if (model instanceof IModelParticleProvider) {
Set<TextureAtlasSprite> hitSprites = ((IModelParticleProvider) model).getHitEffects(traceResult, state, world, pos);
List<TextureAtlasSprite> sprites = hitSprites.stream().filter(sprite -> !ignoredParticleSprites.contains(sprite)).collect(Collectors.toList());
double speed = 0.15000000596046448D;
if (numParticles != 0) {
for (int i = 0; i < numParticles; i++) {
double mX = randy.nextGaussian() * speed;
double mY = randy.nextGaussian() * speed;
double mZ = randy.nextGaussian() * speed;
manager.addEffect(DigIconParticle.newLandingParticle(world, entityPos.x, entityPos.y, entityPos.z, mX, mY, mZ, sprites.get(randy.nextInt(sprites.size()))));
}
}
}
}
}