2 вопроса

Статус
В этой теме нельзя размещать новые ответы.
1,239
2
24
Привет.
  • Как сделать условие для метода ?Например onBlockPlacedBy.И тогда блок спавнится с каким то шансом,да,я знаю это нужно что то писать для world.setBlock()
Код:
public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase en, ItemStack is){     
        world.setBlock(x,y+1,z, Block.getBlockById(1));
    }

  • Как известно,когда наводишь мышью на блок он выделяется черными линиями (ну вы поняли).Где искать метод/код который выполняется когда наводишь мышью на блок?Хочу сделать эффект слепоты или вывод на экран текста(это я даже не знаю
    как гуглить)[/*]
 
Dovakinif(world.rand.nextInt(100)==0)

Код:
if(world.rand.nextInt(101) < procent)
[merge_posts_bbcode]Добавлено: 30.05.2015 20:24:38[/merge_posts_bbcode]

1 - просто не выполнять ничего, когда шанс выпал, а в противном случае ставить воздух.
2 - в тик эвенте, постоянно проверять на что смотрит игрок.
 
Ну, тогда придётся слать пакеты с рендера коллизии.
 
Ну на него ведь когда смотришь он тпхается, то есть взгляд игрока ловит,почему бы с блоком так не сделать?
 
XuPuPG написал(а):
Ну на него ведь когда смотришь он тпхается, то есть взгляд игрока ловит,почему бы с блоком так не сделать?
Ну вот, уже знаешь где искать...
 
2. DrawBlockHighlightEvent.
[merge_posts_bbcode]Добавлено: 31.05.2015 00:54:13[/merge_posts_bbcode]

XuPuPG написал(а):
А серверу плохо не станет от таких проверок?
Как серверу может быть плохо, если ты тикаешь и проверяешь на клиенте? -_-
 
Agravaine написал(а):
2. DrawBlockHighlightEvent.
[merge_posts_bbcode]Добавлено: 31.05.2015 00:54:13[/merge_posts_bbcode]

XuPuPG написал(а):
А серверу плохо не станет от таких проверок?
Как серверу может быть плохо, если ты тикаешь и проверяешь на клиенте? -_-
И как рисовать рамку красным,к примеру?
 
Agravaine написал(а):
2. DrawBlockHighlightEvent.
[merge_posts_bbcode]Добавлено: 31.05.2015 00:54:13[/merge_posts_bbcode]

XuPuPG написал(а):
А серверу плохо не станет от таких проверок?
Как серверу может быть плохо, если ты тикаешь и проверяешь на клиенте? -_-
Если юзать
Код:
        MovingObjectPosition movingobjectposition = this.getMovingObjectPositionFromPlayer(p_77659_2_, p_77659_3_, flag);
То это и на сервере работает.
 
Dovakin написал(а):
Agravaine написал(а):
2. DrawBlockHighlightEvent.
[merge_posts_bbcode]Добавлено: 31.05.2015 00:54:13[/merge_posts_bbcode]

XuPuPG написал(а):
А серверу плохо не станет от таких проверок?
Как серверу может быть плохо, если ты тикаешь и проверяешь на клиенте? -_-
И как рисовать рамку красным,к примеру?
Блеее.
Ну отменяешь рендер и рисуешь по новому. В ивенте есть RenderGlobal.
 
Нашел вот такое(к 2 пункту)

Код:
@SideOnly(Side.CLIENT)
    @SubscribeEvent
    public void BlockHighlight(DrawBlockHighlightEvent event){
        event.setCanceled(true);
    }
 Вместо event.setCanceled(true); можно писать все что угодно и это будет выполняться когда игрок навелся на блок?Этот эвент не отменяет рендер рамку выделения если писать так.А мне нужно для конкретного блока такое писать
 
Набросал:
Код:
@SubscribeEvent
public void typeHighlight(DrawBlockHighlightEvent event) {

MovingObjectPosition mop = event.target;

if (mop != null && mop.typeOfHit == MovingObjectType.BLOCK) {

EntityPlayer player = event.player;
World world = player.worldObj;

int x = mop.blockX;
int y = mop.blockY;
int z = mop.blockZ;

if (world.getBlock(x, y, z) == Blocks.iron_ore) {//Тут должен быть твой "определённый блок".
    event.setCanceled(true);
}

}
}
И типа нужно создать свой рендер этих линий выделения блока, пока-что не знаю как лучше сделать подобное.
 
В классе клиент-прокси в метод, который связан с Init'ом:
Код:
MinecraftForge.EVENT_BUS.register(new YouEvent());

В Клиент-прокси в ините:
Код:
MinecraftForge.EVENT_BUS.register(new EventClient());

Код:
public class EventClient {

@SubscribeEvent
public void typeHighlight(DrawBlockHighlightEvent event) {

MovingObjectPosition mop = event.target;

if (mop != null && mop.typeOfHit == MovingObjectType.BLOCK) {

EntityPlayer player = event.player;
World world = player.worldObj;

int x = mop.blockX;
int y = mop.blockY;
int z = mop.blockZ;

if (world.getBlock(x, y, z) == Blocks.iron_ore) {
    event.setCanceled(true);
}

}
}

}
 
Код:
public void Init(FMLInitializationEvent event) {
    MinecraftForge.EVENT_BUS.register(new EventClient());
    }
Этот метод?
 
Возможно, я же не знаю как у тебя там всё написано.
 
Код:
public class ClientProxy extends ServerProxy{
        
public void Init(FMLInitializationEvent event) {
    MinecraftForge.EVENT_BUS.register(new EventClient());
    }
    
}

Сервер прокси пустой,прокси объявил в гл.классе, класс EventClient есть
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху