Запрет на прохождение в определённую зону

Версия Minecraft
1.7.10
145
7
31
Здравствуйте. Мне необходимо на клиентской стороне запретить заходить в определённую зону, окружённую с 4 сторон блоками. Как такое можно реализовать? Пытался делать что-то с коллизиями, но безуспешно
1555954110647.png
 
Последнее редактирование:
Решение
Такой вот хук решает проблему. Вот только он у меня на двух сторонах, хз как будет пахать только на клиенте.
Java:
@Hook(at = @At(point = InjectionPoint.RETURN))
    public static void getCollidingBoundingBoxes(World world, Entity entity, AxisAlignedBB box){
        if(entity instanceof EntityPlayer){
            EntityPlayer player = (EntityPlayer)entity;
            
            List<AxisAlignedBB> collisions = world.collidingBoundingBoxes;
            AxisAlignedBB mapArea = getCurrentMap().getArea();

            if(box.intersectsWith(mapArea)){
                collisions.add(AxisAlignedBB.getBoundingBox(mapArea.minX, mapArea.minY, mapArea.minZ, mapArea.maxX, mapArea.maxY, mapArea.minZ))...
Во-первых я узнал супер-слово: "консистентность"
Буду теперь им выпендриваться(мун)

Так вот, тебе нужно поддерживать консистентность клиентских и серверных данных об этой твоей "зоне". Когда данные к-о-н-с-и-с-т-е-н-т-н-ы ты можешь ловить ивентики передвижения игрока и записывать каждый раз его предыдущую позицию. Если вдруг ты определишь, что аабб игрока внутри твоей коробочки, просто найди вектор его передвижения из ранее записанных координат и текущих, а затем вычти лишнее.

Удачи там да(мун)

P.S. Это лучше того, что сверху, ибо при чем тут взгляд лол?
 
Такой вот хук решает проблему. Вот только он у меня на двух сторонах, хз как будет пахать только на клиенте.
Java:
@Hook(at = @At(point = InjectionPoint.RETURN))
    public static void getCollidingBoundingBoxes(World world, Entity entity, AxisAlignedBB box){
        if(entity instanceof EntityPlayer){
            EntityPlayer player = (EntityPlayer)entity;
            
            List<AxisAlignedBB> collisions = world.collidingBoundingBoxes;
            AxisAlignedBB mapArea = getCurrentMap().getArea();

            if(box.intersectsWith(mapArea)){
                collisions.add(AxisAlignedBB.getBoundingBox(mapArea.minX, mapArea.minY, mapArea.minZ, mapArea.maxX, mapArea.maxY, mapArea.minZ));
                collisions.add(AxisAlignedBB.getBoundingBox(mapArea.minX, mapArea.minY, mapArea.maxZ, mapArea.maxX, mapArea.maxY, mapArea.maxZ));
                collisions.add(AxisAlignedBB.getBoundingBox(mapArea.minX, mapArea.minY, mapArea.minZ, mapArea.minX, mapArea.maxY, mapArea.maxZ));
                collisions.add(AxisAlignedBB.getBoundingBox(mapArea.maxX, mapArea.minY, mapArea.minZ, mapArea.maxX, mapArea.maxY, mapArea.maxZ));
                collisions.add(AxisAlignedBB.getBoundingBox(mapArea.minX, mapArea.minY, mapArea.minZ, mapArea.maxX, mapArea.minY, mapArea.maxZ));
                collisions.add(AxisAlignedBB.getBoundingBox(mapArea.minX, mapArea.maxY, mapArea.minZ, mapArea.maxX, mapArea.maxY, mapArea.maxZ));
            }
        }
    }
 
ибо при чем тут взгляд лол?
я хотел предложить сразу сетать скорость в 0 при попадании в близь координат нужного квадрата(или при подходе), ну и как-то еще закостылить отхождение от кадрата, по направлению взгляда(если на квадрат - скорость 0.)
 
Такой вот хук решает проблему. Вот только он у меня на двух сторонах, хз как будет пахать только на клиенте.
Java:
@Hook(at = @At(point = InjectionPoint.RETURN))
    public static void getCollidingBoundingBoxes(World world, Entity entity, AxisAlignedBB box){
        if(entity instanceof EntityPlayer){
            EntityPlayer player = (EntityPlayer)entity;
           
            List<AxisAlignedBB> collisions = world.collidingBoundingBoxes;
            AxisAlignedBB mapArea = getCurrentMap().getArea();

            if(box.intersectsWith(mapArea)){
                collisions.add(AxisAlignedBB.getBoundingBox(mapArea.minX, mapArea.minY, mapArea.minZ, mapArea.maxX, mapArea.maxY, mapArea.minZ));
                collisions.add(AxisAlignedBB.getBoundingBox(mapArea.minX, mapArea.minY, mapArea.maxZ, mapArea.maxX, mapArea.maxY, mapArea.maxZ));
                collisions.add(AxisAlignedBB.getBoundingBox(mapArea.minX, mapArea.minY, mapArea.minZ, mapArea.minX, mapArea.maxY, mapArea.maxZ));
                collisions.add(AxisAlignedBB.getBoundingBox(mapArea.maxX, mapArea.minY, mapArea.minZ, mapArea.maxX, mapArea.maxY, mapArea.maxZ));
                collisions.add(AxisAlignedBB.getBoundingBox(mapArea.minX, mapArea.minY, mapArea.minZ, mapArea.maxX, mapArea.minY, mapArea.maxZ));
                collisions.add(AxisAlignedBB.getBoundingBox(mapArea.minX, mapArea.maxY, mapArea.minZ, mapArea.maxX, mapArea.maxY, mapArea.maxZ));
            }
        }
    }
ух ты кто то юзает якоря
 
я хотел предложить сразу сетать скорость в 0 при попадании в близь координат нужного квадрата(или при подходе), ну и как-то еще закостылить отхождение от кадрата, по направлению взгляда(если на квадрат - скорость 0.)
я могу смотреть прямо, а идти влево
 
Якоря топ ваще, оч помогают)
хз тут смысла не вижу, но вообще верю(мун)

все в жизни можно за-говно-костылить. И ты знаешь это лучше меня(говнокоддера..) (мун)
важный момент
можно закостылить баг
можно наговнокодить рабочий код
но нельзя сделать велосипед, если ты делаешь мяч
 
можно закостылить баг
можно наговнокодить рабочий код
Если само совершенствоваться - можно перестать костылить баги и писать говнокод)
но нельзя сделать велосипед, если ты делаешь мяч
Соглашусь.
Давай закончим тему, ибо не в то русло ухожу я....
 
Назад
Сверху