Обычная пуля или сверхсветовой поражающий луч?

Версия Minecraft
1.7.10
1,173
28
168
Думаю над тем, чтобы пвп составляющая оружейного мода была более менее адекватной.
Но вот тут выбор, дамажить сущности, лежащих на вектора взгляда игрока, или просто спавнить пули
Пули у меня спавнятся хреново, с задержкой дикой на сервере, и из-за этого невозможно адекватно перестреливаться
Так как мне баллистика не важна, хочу попробовать 1 метод. Можно ли рандомом искривлять взгляд игрока в сторону? Типо разброс. Кроме движения экрана, кншн. И какие подводные камни?
 
лежащих на вектора взгляда игрока
Однозначно так. Энтити пули очень сильно нагружают сервер, это уже практика многих серверов.
Трассировка взгляда игрока уже есть в майне, можешь посмотреть там.
 
1,173
28
168
Я чекнул тему Положение игрока
Способ такой же, как мне надо сделать, но я не понял как амазинг это пофиксил... Там проблема была с рассинхроном позиций игрока, собственно как и с обычной пулей
 
Последнее редактирование:
1,173
28
168
Пытаюсь через:
Java:
MovingObjectPosition object = Minecraft.getMinecraft().objectMouseOver;
            if (object.typeOfHit == MovingObjectType.ENTITY){
                System.out.println("текст");
            }
Но работает только на близком расстоянии (около 4.5F)
Чорт, столько тем по этому, но я ничего так и не понял >_<
 

tox1cozZ

aka Agravaine
8,454
598
2,890
Пытаюсь через:
Java:
MovingObjectPosition object = Minecraft.getMinecraft().objectMouseOver;
            if (object.typeOfHit == MovingObjectType.ENTITY){
                System.out.println("текст");
            }
Но работает только на близком расстоянии (около 4.5F)
Чорт, столько тем по этому, но я ничего так и не понял >_<
Эта переменная вычисляется в методе EntityRenderer#getMouseOver. Скопируй его себе и измени максимальное расстояние.
 
1,173
28
168
Скопируй его себе и измени максимальное расстояние
да, я уже просек))
Теперь осталось дамажить и сделать разброс
Не совсем понимаю как это делать :(
Хотя на пальцах что то вертится, но я не уверен
 
1,173
28
168
Пакет на сервер отправляй и там уже наноси урон.
Странно, но мне даже это не помогает. Я не понимаю, почему метод setDead() спокойно работает, но атакэнтитифром вообще отказывается, это что за чушь?
 

tox1cozZ

aka Agravaine
8,454
598
2,890
Код давай как отправляешь пакет.
почему метод setDead() спокойно работает
Потому что удалить моба в клиентском мире можно, а вот урон расчитывается только на сервере.
 
1,173
28
168
Java:
public class PacketGunFire extends PacketBase
{
    public boolean held;
    public boolean left;
    
    public PacketGunFire() {}
    
    public PacketGunFire(boolean l, boolean h)
    {
        left = l;
        held = h;
    }

    @Override
    public void encodeInto(ChannelHandlerContext ctx, ByteBuf data)
    {
        data.writeBoolean(held);
        data.writeBoolean(left);
    }

    @Override
    public void decodeInto(ChannelHandlerContext ctx, ByteBuf data)
    {
        held = data.readBoolean();
        left = data.readBoolean();
    }

    @Override
    public void handleServerSide(EntityPlayerMP playerEntity)
    {
        
        ItemStack currentItem = playerEntity.inventory.getCurrentItem();
        GunType gunType = ((ItemGun)currentItem.getItem()).type;
        if(currentItem != null && currentItem.getItem() != null && currentItem.getItem() instanceof ItemGun)
        {
            ((ItemGun)currentItem.getItem()).onMouseHeld(currentItem, playerEntity.worldObj, playerEntity, left, held);
            
        }
        
    }

    @Override
    @SideOnly(Side.CLIENT)
    public void handleClientSide(EntityPlayer clientPlayer)
    {
        
    }
}
Java:
Это изначальный вид пакета с юзом энтити еще.
Я не знаю просто как впихнуть сюда вектор с темы отсюда, я оттуда взял только энтити лук и часть кода с класса ЭвентИнит.
Я полюбому неправильно пакет отправлял поэтому просто не хочу стыдиться, простите((
 
Сверху