Выделение области

100
0
Люди добрые подскажите как реализовать выделение области как в WorldEdit
и еще вопросик как отслеживать наведение предмета на блок
 
эээ чет у я немного не понял куда и как это использовать  , мне надо сделать что то типо навел на блок и выделилась область  
 я очень слабо в этом разбираюсь можешь пример по моему смыслу прислать.
 
global-as написал(а):
эээ что это значит

Это значит, что тебе не хватает опыта в программировании на Java.
 
global-as, то как я тебя понял:
[youtube]zRcPg-yRrfw[/youtube]
Код:
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.MovingObjectPosition;
import net.minecraftforge.client.event.DrawBlockHighlightEvent;

import org.lwjgl.opengl.GL11;

import cpw.mods.fml.common.eventhandler.SubscribeEvent;

public class EventsForgeClient {

    Minecraft mc = Minecraft.getMinecraft();

    @SubscribeEvent
    public void selectHighlight(DrawBlockHighlightEvent event) {
        if (event.target != null && event.target.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) {

            //dot start
            double ax = event.target.blockX;
            double ay = event.target.blockY;
            double az = event.target.blockZ;

            //dot end
            double bx = event.target.blockX + 1;
            double by = event.target.blockY + 1;
            double bz = event.target.blockZ + 1;

            AxisAlignedBB aabb = AxisAlignedBB.getBoundingBox(ax, ay, az, bx, by, bz).expand(0.01D, 0.01D, 0.01D);

            double x_fix = -(mc.thePlayer.lastTickPosX + (mc.thePlayer.posX - mc.thePlayer.lastTickPosX) * event.partialTicks);
            double y_fix = -(mc.thePlayer.lastTickPosY + (mc.thePlayer.posY - mc.thePlayer.lastTickPosY) * event.partialTicks);
            double z_fix = -(mc.thePlayer.lastTickPosZ + (mc.thePlayer.posZ - mc.thePlayer.lastTickPosZ) * event.partialTicks);

            GL11.glPushMatrix();
            GL11.glTranslated(x_fix, y_fix, z_fix);
            GL11.glEnable(GL11.GL_BLEND);
            GL11.glDisable(GL11.GL_TEXTURE_2D);
            //
            GL11.glColor4f(0.75F, 0.25F, 0.25F, 0.25F);
            box(aabb);
            GL11.glColor4f(0.75F, 0.25F, 0.25F, 0.75F);
            lines(aabb);
            GL11.glColor4f(1F, 1F, 1F, 0F);
            //
            GL11.glEnable(GL11.GL_TEXTURE_2D);
            GL11.glDisable(GL11.GL_BLEND);
            GL11.glPopMatrix();
        }
    }

    public static void box(AxisAlignedBB aabb) {
        Tessellator tessellator = Tessellator.instance;

        tessellator.startDrawingQuads();

        //top
        tessellator.addVertex(aabb.maxX, aabb.maxY, aabb.minZ);
        tessellator.addVertex(aabb.minX, aabb.maxY, aabb.minZ);
        tessellator.addVertex(aabb.minX, aabb.maxY, aabb.maxZ);
        tessellator.addVertex(aabb.maxX, aabb.maxY, aabb.maxZ);

        //bottom
        tessellator.addVertex(aabb.maxX, aabb.minY, aabb.maxZ);
        tessellator.addVertex(aabb.minX, aabb.minY, aabb.maxZ);
        tessellator.addVertex(aabb.minX, aabb.minY, aabb.minZ);
        tessellator.addVertex(aabb.maxX, aabb.minY, aabb.minZ);

        //north
        tessellator.addVertex(aabb.maxX, aabb.minY, aabb.minZ);
        tessellator.addVertex(aabb.minX, aabb.minY, aabb.minZ);
        tessellator.addVertex(aabb.minX, aabb.maxY, aabb.minZ);
        tessellator.addVertex(aabb.maxX, aabb.maxY, aabb.minZ);

        //south
        tessellator.addVertex(aabb.maxX, aabb.maxY, aabb.maxZ);
        tessellator.addVertex(aabb.minX, aabb.maxY, aabb.maxZ);
        tessellator.addVertex(aabb.minX, aabb.minY, aabb.maxZ);
        tessellator.addVertex(aabb.maxX, aabb.minY, aabb.maxZ);

        //west
        tessellator.addVertex(aabb.minX, aabb.maxY, aabb.maxZ);
        tessellator.addVertex(aabb.minX, aabb.maxY, aabb.minZ);
        tessellator.addVertex(aabb.minX, aabb.minY, aabb.minZ);
        tessellator.addVertex(aabb.minX, aabb.minY, aabb.maxZ);

        //east
        tessellator.addVertex(aabb.maxX, aabb.minY, aabb.maxZ);
        tessellator.addVertex(aabb.maxX, aabb.minY, aabb.minZ);
        tessellator.addVertex(aabb.maxX, aabb.maxY, aabb.minZ);
        tessellator.addVertex(aabb.maxX, aabb.maxY, aabb.maxZ);

        tessellator.draw();
    }

    public static void lines(AxisAlignedBB aabb) {
        GL11.glBegin(GL11.GL_LINES);

        /*-top-*/
        GL11.glVertex3d(aabb.minX, aabb.maxY, aabb.minZ);//a - 1
        GL11.glVertex3d(aabb.maxX, aabb.maxY, aabb.minZ);//b - 2

        GL11.glVertex3d(aabb.maxX, aabb.maxY, aabb.minZ);//a - 2
        GL11.glVertex3d(aabb.maxX, aabb.maxY, aabb.maxZ);//b - 3

        GL11.glVertex3d(aabb.maxX, aabb.maxY, aabb.maxZ);//a - 3
        GL11.glVertex3d(aabb.minX, aabb.maxY, aabb.maxZ);//b - 4

        GL11.glVertex3d(aabb.minX, aabb.maxY, aabb.maxZ);//a - 4
        GL11.glVertex3d(aabb.minX, aabb.maxY, aabb.minZ);//b - 1

        /*-bottom-*/
        GL11.glVertex3d(aabb.minX, aabb.minY, aabb.minZ);//a - 1
        GL11.glVertex3d(aabb.maxX, aabb.minY, aabb.minZ);//b - 2

        GL11.glVertex3d(aabb.maxX, aabb.minY, aabb.minZ);//a - 2
        GL11.glVertex3d(aabb.maxX, aabb.minY, aabb.maxZ);//b - 3

        GL11.glVertex3d(aabb.maxX, aabb.minY, aabb.maxZ);//a - 3
        GL11.glVertex3d(aabb.minX, aabb.minY, aabb.maxZ);//b - 4

        GL11.glVertex3d(aabb.minX, aabb.minY, aabb.maxZ);//a - 4
        GL11.glVertex3d(aabb.minX, aabb.minY, aabb.minZ);//b - 1

        /*-side-/-edge-*/
        GL11.glVertex3d(aabb.minX, aabb.maxY, aabb.minZ);//a
        GL11.glVertex3d(aabb.minX, aabb.minY, aabb.minZ);//b

        GL11.glVertex3d(aabb.maxX, aabb.maxY, aabb.maxZ);//a
        GL11.glVertex3d(aabb.maxX, aabb.minY, aabb.maxZ);//b

        GL11.glVertex3d(aabb.maxX, aabb.maxY, aabb.minZ);//a
        GL11.glVertex3d(aabb.maxX, aabb.minY, aabb.minZ);//b

        GL11.glVertex3d(aabb.minX, aabb.maxY, aabb.maxZ);//a
        GL11.glVertex3d(aabb.minX, aabb.minY, aabb.maxZ);//b

        GL11.glEnd();
    }

}
 
да то что надо только одна проблема 
 ругается на   @SubscribeEvent
 и на MovingObjectPosition

у меня 1.6.4 версия
 
На 1.6.4 не
Код:
@SubscribeEvent
А:
Код:
@ForgeSubscribe
---
На 1.6.4 как и на 1.7.10 "MovingObjectPosition" лежит в "net.minecraft.util".
 
Да странно он есть вручную импортировал но там что то с MovingObjectType

в самом он MovingObjectPosition
/** What type of ray trace hit was this? 0 = block, 1 = entity */
    public EnumMovingObjectType typeOfHit;
[merge_posts_bbcode]Добавлено: 16.02.2016 00:03:17[/merge_posts_bbcode]

что то я не догоняю как это работает я выкинул условие и по сути что то должно рисоваться но нечего не происходит
 
Ты хотя-бы эвент зарегистрировал?
 
Поменять с:
Код:
MovingObjectPosition.MovingObjectType.BLOCK
На:
Код:
EnumMovingObjectType.TILE
[merge_posts_bbcode]Добавлено: 15.02.2016 23:11:22[/merge_posts_bbcode]

Регистрировать в клиент прокси:
Код:
MinecraftForge.EVENT_BUS.register(new EventsForgeClient());
В Init'е к примеру.
 
Назад
Сверху