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

Версия 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))...
1,111
47
420
Во-первых я узнал супер-слово: "консистентность"
Буду теперь им выпендриваться(мун)

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

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

P.S. Это лучше того, что сверху, ибо при чем тут взгляд лол?
 

tox1cozZ

aka Agravaine
8,454
598
2,890
Такой вот хук решает проблему. Вот только он у меня на двух сторонах, хз как будет пахать только на клиенте.
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));
            }
        }
    }
 

will0376

Токсичная личность
2,059
55
572
ибо при чем тут взгляд лол?
я хотел предложить сразу сетать скорость в 0 при попадании в близь координат нужного квадрата(или при подходе), ну и как-то еще закостылить отхождение от кадрата, по направлению взгляда(если на квадрат - скорость 0.)
 
1,111
47
420
Такой вот хук решает проблему. Вот только он у меня на двух сторонах, хз как будет пахать только на клиенте.
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));
            }
        }
    }
ух ты кто то юзает якоря
 
1,111
47
420
я хотел предложить сразу сетать скорость в 0 при попадании в близь координат нужного квадрата(или при подходе), ну и как-то еще закостылить отхождение от кадрата, по направлению взгляда(если на квадрат - скорость 0.)
я могу смотреть прямо, а идти влево
 
1,111
47
420
Якоря топ ваще, оч помогают)
хз тут смысла не вижу, но вообще верю(мун)

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

will0376

Токсичная личность
2,059
55
572
можно закостылить баг
можно наговнокодить рабочий код
Если само совершенствоваться - можно перестать костылить баги и писать говнокод)
но нельзя сделать велосипед, если ты делаешь мяч
Соглашусь.
Давай закончим тему, ибо не в то русло ухожу я....
 
Сверху