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

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

tox1cozZ

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

tox1cozZ

aka Agravaine
8,455
598
2,892
Код давай как отправляешь пакет.
почему метод setDead() спокойно работает
Потому что удалить моба в клиентском мире можно, а вот урон расчитывается только на сервере.
 
1,193
31
182
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:
Это изначальный вид пакета с юзом энтити еще.
Я не знаю просто как впихнуть сюда вектор с темы отсюда, я оттуда взял только энтити лук и часть кода с класса ЭвентИнит.
Я полюбому неправильно пакет отправлял поэтому просто не хочу стыдиться, простите((
 
Сверху