1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Стартап Помощь в изучении языка Java

Тема в разделе "Разработка плагинов для новичков", создана пользователем D_ART, 21 июн 2012.

  1. DPOH-VAR

    DPOH-VAR Старожил Пользователь

    Баллы:
    153
    Skype:
    dpohvar
    Если классы лежат в одном пакете, импортировать не нужно - javac сам понимает и подхватывает их во время компиляции.
    Если же классы в разных пакетах или проектах - нужно определить импорт.
    Обычно хорошие IDE импортируют всё автоматически.
    UPD: подробности есть в любой литературе об основах языка Java
     
    JustBlender нравится это.
  2. michaelukolov

    michaelukolov Активный участник Пользователь

    Баллы:
    68
    Skype:
    michael.ukolov
    Имя в Minecraft:
    UGT_Micl
    А как делают работу с табличками? Мне надо чтобы на первой строке писали [Nova-Craft] на второй цену, и на третьей стутус, как сделать снятие денег и при клике на табличку?
     
  3. JustBlender

    JustBlender Старожил Девелопер Пользователь

    Баллы:
    123
    Skype:
    justblender
    Имя в Minecraft:
    JustBlender
    Ну тогда просто эвент регистрируй, в главном классе
     
  4. Serrrgio

    Serrrgio Старожил Пользователь

    Баллы:
    173
    Skype:
    nonecsa
    Имя в Minecraft:
    None
    Чтоб не создавать отдельную тему, подскажите, как в событии onBlockPlace проверить, что блок ставится в обычном мире?
     
  5. DPOH-VAR

    DPOH-VAR Старожил Пользователь

    Баллы:
    153
    Skype:
    dpohvar
    event.getBlock().getWorld().equals(Bukkit.getWorlds().get(0))
    UPD: возиожно я не правильно понял, имелось в виду
    world.getEnvironment()
     
    Serrrgio нравится это.
  6. Serrrgio

    Serrrgio Старожил Пользователь

    Баллы:
    173
    Skype:
    nonecsa
    Имя в Minecraft:
    None
    спасибо, вроде оно.
    На сервере есть область, где можно ломать, но ставить блоки нельзя
    Код:
    @EventHandler
        public void onBlockPlace(BlockPlaceEvent event) {
            if (event.isCancelled() || event.getPlayer() == null || event.getPlayer().isOp()) {
                return;
            }
          
            Block b = event.getBlock();
            if (!b.getWorld().equals(Bukkit.getWorlds().get(0))) {
                return;
            }
          
            int bX = b.getX();
            int bY = b.getY();
            int bZ = b.getZ();
          
            if (bY>64 && bY<100 && bX>0 && bX<100 && bZ>0 && bZ<100) {
                event.setCancelled(true);
                event.getPlayer().kickPlayer("Ставить блоки запрещено.");
            }
        } 
    правильно ли я делаю? Правильно ли вызывать метод kickPlayer из onBlockPlace?

    Другой вопрос, эта область выделена в регион WorldGuard, может использовать API WorldGuard и сравнивать имя региона, чем делать проверку по координатам области и т.д.? Что в этом случае будет с производительностью сервера?
     
    ПриветОтЛайки нравится это.
  7. DPOH-VAR

    DPOH-VAR Старожил Пользователь

    Баллы:
    153
    Skype:
    dpohvar
    1) Не структурированно, но правильно
    2) kickPlayer вызывать можно, т.к. событие синхронное.
    Но не грубо ли? Можно просто
    Код:
    event.setCancelled(true); // не сможет поставить, т.к. событие отменено
    player.sendMessage("блабла, ставить блоки запрещено")
    3) Можете смело использовать WorldGuard: http://wiki.sk89q.com/wiki/WorldGuard/Regions/API
    При таком режиме на производительность это почти не повлияет.
     
    Serrrgio нравится это.
  8. musel70

    musel70 Активный участник Пользователь

    Баллы:
    88
    Для экономии места задам нубский вопрос здесь.
    Как получить блок слева и справа перед игроком. Все на уровне глаз.
    поясню "о" - блок. "O" -блок который нужно получить Й - игрок.
    00000000000000000000000000
    00000000ОоОоооооооооооооооо
    ооооооооооЙооооооооооооооооо
     
  9. DPOH-VAR

    DPOH-VAR Старожил Пользователь

    Баллы:
    153
    Skype:
    dpohvar
    Сначала берем
    eye = player.getEyeLocation() - это позиция глаз игрока.
    Теперь dir = eye.getDirection() - это направление, куда смотрит игрок.
    targetBlock = eye.add(dir).getBlock() - мы получили блок на расстоянии 1 от глаз.

    Вариант 1: если нужно ориентироваться по сторонам света
    По значению dir.getYaw() узнаем, в какую из четырех сторон смотрит игрок. Точнее, нужно проработать всего 2 варианта. (север-юг) и (запад-восток)
    Пример есть тут:
    http://forums.bukkit.org/threads/direction-the-playser-faces-north-south.20773/
    Дальше - в зависимоси от направления:
    block1 = targetBlock.getRelative(NORTH); block2 = targetBlock.getRelative(SOUTH)
    или
    block1 = targetBlock.getRelative(EAST); block2 = targetBlock.getRelative(WEST)

    Вариант 2: если нужно учитывать все направления.
    Делайте вращение вектора на угол 90 , затем берите следующий блок от targetBlock на расстоянии 1 (векторы можно нормализовывать методом normalize ), затем разворот вектора (можно уможить на -1), и снова берем следующий блок от targetBlock. Тогда Блоки будут браться даже по диагонали, причем с учетом высоты взгляда. ниже - пример.
    .X... X - блок-цель
    ..A.. A - блок, на который смотрит игрок
    .P.X. P - позиция игрока

    Как делать вращение вектора - смотрите в учебнике по линейной алгебре. У Bukkit API нет своих методов для вращения. Подозреваю, что здесь требуется векторное произведение вектора на какую-то константу. А это - есть.
    Пардон, придумал способ проще.
    Сейчас распишу.
    UPD: код на груви, возвращает массив из двух блоков. me - это игрок.
    Перепишите на java (это вроде не сложно)
    Код:
    import static org.bukkit.block.BlockFace.*
    
    def eye = me.eyeLocation
    def myFace = getFace(eye.yaw)
    blocks = []
    for (def face: getTargetFaces(myFace)) {
        blocks.add(eye.block.getRelative(face))
    }
    return blocks
    
    def getFace (yaw) {
        if (315<yaw || yaw<45) SOUTH
        else if (yaw<135) WEST
        else if (yaw<225) NORTH;
        else EAST;
    }
    
    def getTargetFaces (face) {
        switch (face) {
            case NORTH: return [NORTH_WEST,NORTH_EAST]
            case EAST: return [NORTH_EAST,SOUTH_EAST]
            case WEST: return [NORTH_WEST,SOUTH_WEST]
            case SOUTH: return [SOUTH_EAST,SOUTH_WEST]
        }
    }
     
    Последнее редактирование: 10 апр 2014
    musel70 нравится это.
  10. MrDigger

    MrDigger Активный участник

    Баллы:
    48
    Skype:
    MrDigger04
    Имя в Minecraft:
    DiGGeR
    Админ что за хрень? Я вам уже месяц пишу по поводу покупки рекламы а вы не отвечаете???
     
    Последнее редактирование модератором: 12 окт 2023
  11. Dereku

    Dereku Старожил Пользователь

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Сервер чёль рекламить будешь? Нахер оно надо.
     
  12. Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Admin избранным отвечает
     
    Последнее редактирование модератором: 12 окт 2023
  13. MrDigger

    MrDigger Активный участник

    Баллы:
    48
    Skype:
    MrDigger04
    Имя в Minecraft:
    DiGGeR
    Зачем сервер? Хостинг ...
     
  14. SwiftAdviser

    SwiftAdviser Старожил Пользователь

    Баллы:
    103
    Имя в Minecraft:
    SwiftAdviser
    Добавьте - javarush.ru
    Я прохожу - отлично!
     
    Лайка3, Javascript, mahimamax и ещё 1-му нравится это.
  15. Dereku

    Dereku Старожил Пользователь

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    В нём можно только под IE сидеть нормально.
     
    Лайка3, Mr_RoboMan, Лайка2 и 2 другим нравится это.
  16. SwiftAdviser

    SwiftAdviser Старожил Пользователь

    Баллы:
    103
    Имя в Minecraft:
    SwiftAdviser
    Dereku, я и под хромом сижу - норма. + там задания потом уже в IntelliJ IDEA
     
    Лайка3, Mr_RoboMan, Лайка2 и 2 другим нравится это.
  17. Splashins

    Splashins Старожил Пользователь Заблокирован

    Баллы:
    153
    Имя в Minecraft:
    Splash
    У тебя столько школьных обедов не было :D, сколько реклама здесь стоит :p
     
    Лайка3, Mr_RoboMan, Лайка2 и 2 другим нравится это.
  18. BeLkA

    BeLkA Старожил Пользователь

    Баллы:
    153
    Skype:
    FayStaff
    Требую добавления сюда в список JavaRush! http://javarush.ru - самый лучший сайт, легко и понятно дается материал, в виде игры, и мультов "Футурамы"
     
  19. aceJKE

    aceJKE Старожил Пользователь

    Баллы:
    123
    Когда я туда зашел, у меня сразу же пропало желание что-либо изучать...
     
  20. BeLkA

    BeLkA Старожил Пользователь

    Баллы:
    153
    Skype:
    FayStaff
    Почему же?
     

Поделиться этой страницей