- 48
- 1
- 4
У меня две проблемки с Bounding Box.
Мы знаем, что "рамка" блока отрисовывается только тогда, когда игрок смотрит на блок и вот:
1) В общем, мне нужно, чтобы у некоторых блоков Bounding Box отрисовывался даже тогда, когда на них не смотришь.
Я нашёл код этого в классе Render Global
И тут есть интересная строчка
Как я понимаю, проверяется соприкосновение луча, выпущенного из прицела игрока с блоком (или что-то типо того, не суть важно).
Этот код, я естественно изменять не могу, т.к. это исходники самого майна и убрать проверку никак. Есть ли какой-нибудь способ поменять это? Написать свой "Render Global" для конкретных блоков и (или) подменить его?
Я пробовал ещё через эвенты, например (DrawBlockHighlightEvent), но этот эвент срабатывает уже только тогда, когда игрок навёлся мышкой, а мне же нужно, чтобы отрисовка была без наведения.
2) И ещё одна маленькая проблемка. Я изменил Bounding Box блока, уменьшил его до половины в ширину, визуально он уменьшился, но как будто остался прежним, та часть которая уменьшилась, там хоть и появилось пространство, но ходить я всё-равно не могу, а если уменьшить на половину в высоту, то с блока скидывает, как будто ничего и не уменьшилось, только визуально.
На скриншоте я иду прямо, но он просто не пускает.
Может я тупой, но шо делать и как быть?
Мы знаем, что "рамка" блока отрисовывается только тогда, когда игрок смотрит на блок и вот:
1) В общем, мне нужно, чтобы у некоторых блоков Bounding Box отрисовывался даже тогда, когда на них не смотришь.
Я нашёл код этого в классе Render Global
Java:
/**
* Draws the selection box for the player.
*/
public void drawSelectionBox(EntityPlayer player, RayTraceResult movingObjectPositionIn, int execute, float partialTicks)
{
if (execute == 0 && movingObjectPositionIn.typeOfHit == RayTraceResult.Type.BLOCK)
{
GlStateManager.enableBlend();
GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO);
GlStateManager.glLineWidth(2.0F);
GlStateManager.disableTexture2D();
GlStateManager.depthMask(false);
BlockPos blockpos = movingObjectPositionIn.getBlockPos();
IBlockState iblockstate = this.world.getBlockState(blockpos);
if (iblockstate.getMaterial() != Material.AIR && this.world.getWorldBorder().contains(blockpos))
{
double d3 = player.lastTickPosX + (player.posX - player.lastTickPosX) * (double)partialTicks;
double d4 = player.lastTickPosY + (player.posY - player.lastTickPosY) * (double)partialTicks;
double d5 = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * (double)partialTicks;
drawSelectionBoundingBox(iblockstate.getSelectedBoundingBox(this.world, blockpos).grow(0.0020000000949949026D).offset(-d3, -d4, -d5), 0.0F, 0.0F, 0.0F, 0.4F);
}
GlStateManager.depthMask(true);
GlStateManager.enableTexture2D();
GlStateManager.disableBlend();
}
}
Java:
if (execute == 0 && movingObjectPositionIn.typeOfHit == RayTraceResult.Type.BLOCK)
Этот код, я естественно изменять не могу, т.к. это исходники самого майна и убрать проверку никак. Есть ли какой-нибудь способ поменять это? Написать свой "Render Global" для конкретных блоков и (или) подменить его?
Я пробовал ещё через эвенты, например (DrawBlockHighlightEvent), но этот эвент срабатывает уже только тогда, когда игрок навёлся мышкой, а мне же нужно, чтобы отрисовка была без наведения.
2) И ещё одна маленькая проблемка. Я изменил Bounding Box блока, уменьшил его до половины в ширину, визуально он уменьшился, но как будто остался прежним, та часть которая уменьшилась, там хоть и появилось пространство, но ходить я всё-равно не могу, а если уменьшить на половину в высоту, то с блока скидывает, как будто ничего и не уменьшилось, только визуально.
На скриншоте я иду прямо, но он просто не пускает.
Может я тупой, но шо делать и как быть?