[1.8-1.9]действие со случайным шансом

Статус
В этой теме нельзя размещать новые ответы.
917
22
332
Думаю из названия всё понятно. Не думаю что имеет смысл выкладывать весь код, поэтому выложил метод:
Код:
    public void onBlockClicked(World world, BlockPos pos, EntityPlayer entity){
        int i = pos.getX();int j = pos.getY();int k = pos.getZ();
        if(true){
            world.destroyBlock(new BlockPos(i, j, k), true);
        }
    }
Нужно чтобы действие destroyBlock происходило с шансом 50%.
Спасибо всем поучаствовавшим!
 

timaxa007

Модератор
5,831
409
672
Место "true" использовать "world.rand.nextBoolean()".
 
52
0
Кто-то мне объяснит, зачем он вытаскивает из BlockPos позицию блока, а затем создает новый объект BlockPos с теми же координатами?
 
1,137
5
3
Nichie написал(а):
Кто-то мне объяснит, зачем он вытаскивает из BlockPos позицию блока, а затем создает новый объект BlockPos с теми же координатами?
Чтобы убедиться в хорошей работе GC. *какая-то реклама GC*
 
917
22
332
Вчера попробовать не успел, пробую сегодня. Всё заработало, но не так как нужно.
Код:
    public void onBlockClicked(World world, BlockPos pos, EntityPlayer entity){
        int i = pos.getX();int j = pos.getY();int k = pos.getZ();
        if(world.rand.nextBoolean()){
            if(true){
                world.destroyBlock(pos, true);
            }
        }
    }
Использую такой код, но с 50% шансом происходит не уничтожение блока а выпадение дропа. Блок как разрушался при клике так и разрушается. Подскажите где я туплю...
 
7,099
324
1,510
А ты сделай, чтобы при клике с вероятностью 50% блок заново ставился:lol:
 

timaxa007

Модератор
5,831
409
672
Крокодил, возможно надо сделать условие на "!world.isRemote" для destroyBlock или поставить вместе с условием рандома, так как рандом на две стороны может по разному работать.
На клиентской стороне сломан, на серверной стороне нет, т.е. в видимости он сломан, но на самом деле он стоит. Или на оборот. Блок сломан дроп выпал, но на клиентской стороне он ещё стоит.
 
2,505
81
397
Кароче, вот так пробни
Код:
public void onBlockClicked(World world, BlockPos pos, EntityPlayer entity)
{
    if (!world.isRemote && world.rand.nextBoolean()) {
        world.destroyBlock(pos, true);
    }
}
 
917
22
332
Всё работает, тему можно закрыть. Надо было написать раньше но совсем вылетело из головы.
Всем спасибо!
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху