Сервер и взгляд игрока

Версия Minecraft
1.12.2
API
Forge
205
12
103
Дошел до уровня математики и логики, который просто не осиливаю: есть предмет, при нажатии ПКМ которым выпускается снаряд, если снаряд попал в цель - игрока необходимо телепортировать за спину цели и направить взгляд на эту цель. Насколько мне известно, направление взгляда - чисто клиентская штука, а импакт кидаемой энтити - серверная, соответственно, как передать клиенту моба, в которого попала энтить - вопрос.
Итого, у меня есть 2 неразрешенные задачи:
1. Телепортация выстрелившего игрока за спину цели, в которую попал снаряд
2. Поворот взгляда игрока к цели, в которую попал снаряд

В случае с первой проблемой я просто не могу понять как продлить инвертированный вектор взгляда моба, в случае же со второй - как мне сообщить на клиент цель, к которой нужно повернуть взгляд игрока (либо, если это возможно, - вращать взгляд на стороне сервера, но, насколько я знаю, оно только клиент).

P.S. - Уже настолько мозг (то, что от него осталось) кипит, что не могу предложение нормально сформулировать.
 
205
12
103
Нет. Если на сервере меняешь rotationYaw/Pitch, то он синхронизируется с клиентом.
Допустим. если целью попадания является энтить, я меняю эти значения:

Java:
    @Override
    protected void onImpact(RayTraceResult result) {
        if (world.isRemote) return;
        if (getThrower() instanceof EntityPlayer) {
            EntityPlayer player = (EntityPlayer) getThrower();
            ItemStack itemStack = getStack();
            NBTTagCompound nbtTagCompound = itemStack.getTagCompound();
            switch (result.typeOfHit) {
                case BLOCK:
                    if (NBTUtils.getIntegerNBTTag(nbtTagCompound, FlashBladeItem.TAG_MODE) == 1) {
                        NBTUtils.setStringNBTTag(itemStack, FlashBladeItem.TAG_POSITION,
                                NBTUtils.getStringNBTTag(nbtTagCompound, FlashBladeItem.TAG_POSITION)
                                        + result.getBlockPos().getX() + "," + result.getBlockPos().getY()
                                        + "," + result.getBlockPos().getZ() + ";");
                    }
                    this.setDead();
                case ENTITY:
                    Entity target = result.entityHit;
                    if (target instanceof EntityLiving && target != thrower) {
                        //target.attackEntityFrom(DamageSource.causePlayerDamage(player), 10.0F);
                        if (NBTUtils.getIntegerNBTTag(nbtTagCompound, FlashBladeItem.TAG_MODE) == 0) {
                            player.rotationYaw = 90;
                            player.rotationPitch = 90;
                        }
                        this.setDead();
                    }
            }
        }
    }

Стреляю в моба, и... Ничего не происходит. Пробовал вызывать player.onUpdate(), - не помогло. Хз как обновить позицию игрока тут.
 
205
12
103
((EntityPlayerMP)player).playerNetServerHandler.setPlayerLocation(player.posX, player.posY, player.posZ, yaw, pitch);
Прям такого же не нашел, зато от EntityPlayerMP могу вызвать setLocationAndAngles. Сейчас попробую.

UPD: Эффект тот же. Ничего не происходит.
 
Последнее редактирование:

tox1cozZ

aka Agravaine
8,456
598
2,892
Прям такого же не нашел, зато от EntityPlayerMP могу вызвать setLocationAndAngles. Сейчас попробую.

UPD: Эффект тот же. Ничего не происходит.
В 1.12.2 так: EntityPlayerMP#connection.setPlayerLocation(x, y, z, yaw, pitch);
 
Сверху