diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemTeleStaff.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemTeleStaff.java index f9bcc1eb2..39c44f8f0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemTeleStaff.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemTeleStaff.java @@ -11,17 +11,17 @@ package de.ellpeck.actuallyadditions.mod.items; import de.ellpeck.actuallyadditions.mod.items.base.ItemEnergy; -import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.ServerPlayerEntity; -import net.minecraft.init.SoundEvents; import net.minecraft.item.ItemStack; import net.minecraft.util.ActionResult; -import net.minecraft.util.EnumActionResult; import net.minecraft.util.Hand; import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvents; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; import net.minecraft.util.math.RayTraceResult; -import net.minecraft.util.math.Vec3d; +import net.minecraft.util.math.vector.Vector3d; import net.minecraft.world.World; public class ItemTeleStaff extends ItemEnergy { @@ -34,41 +34,25 @@ public class ItemTeleStaff extends ItemEnergy { public ActionResult onItemRightClick(World world, PlayerEntity player, Hand hand) { ItemStack stack = player.getHeldItem(hand); if (!world.isRemote) { - RayTraceResult pos = WorldUtil.getNearestPositionWithAir(world, player, 100); - if (pos != null && (pos.typeOfHit == RayTraceResult.Type.BLOCK || player.rotationPitch >= -5)) { - int side = pos.sideHit.ordinal(); - if (side != -1) { - double x = pos.hitVec.x - (side == 4 - ? 0.5 - : 0) + (side == 5 - ? 0.5 - : 0); - double y = pos.hitVec.y - (side == 0 - ? 2.0 - : 0) + (side == 1 - ? 0.5 - : 0); - double z = pos.hitVec.z - (side == 2 - ? 0.5 - : 0) + (side == 3 - ? 0.5 - : 0); - int baseUse = 200; - int use = baseUse + (int) (baseUse * pos.hitVec.distanceTo(new Vec3d(player.posX, player.posY + (player.getEyeHeight() - player.getDefaultEyeHeight()), player.posZ))); - if (this.getEnergyStored(stack) >= use) { - ((ServerPlayerEntity) player).connection.setPlayerLocation(x, y, z, player.rotationYaw, player.rotationPitch); - player.dismountRidingEntity(); - world.playSound(null, player.posX, player.posY, player.posZ, SoundEvents.ENTITY_ENDERMEN_TELEPORT, SoundCategory.PLAYERS, 1.0F, 1.0F); - if (!player.isCreative()) { - this.extractEnergyInternal(stack, use, false); - player.getCooldownTracker().setCooldown(this, 50); - } - return ActionResult.newResult(EnumActionResult.SUCCESS, stack); + RayTraceResult rayTraceResult = player.pick(100,0,false); + if (rayTraceResult != null && (rayTraceResult.getType() == RayTraceResult.Type.BLOCK || player.rotationPitch >= -5)) { + BlockRayTraceResult res = (BlockRayTraceResult)rayTraceResult; + BlockPos pos = res.getPos().offset(res.getFace()); + int baseUse = 200; + int use = baseUse + (int) (baseUse * rayTraceResult.getHitVec().distanceTo(new Vector3d(player.getPosX(), player.getPosY() + (player.getEyeHeight() - player.getEyeHeight()), player.getPosZ()))); + if (this.getEnergyStored(stack) >= use) { + ((ServerPlayerEntity) player).connection.setPlayerLocation(pos.getX(), pos.getY(), pos.getY(), player.rotationYaw, player.rotationPitch); + player.dismount(); + world.playSound(null, player.getPosX(), player.getPosY(), player.getPosZ(), SoundEvents.ENTITY_ENDERMAN_TELEPORT, SoundCategory.PLAYERS, 1.0F, 1.0F); + if (!player.isCreative()) { + this.extractEnergyInternal(stack, use, false); + player.getCooldownTracker().setCooldown(this, 50); } + return ActionResult.resultSuccess(stack); } } } player.swingArm(hand); - return ActionResult.newResult(EnumActionResult.FAIL, stack); + return ActionResult.resultFail(stack); } }