Ответы пользователя по тегу Java
  • Как создать GUI в плагине Minecraft?

    twobomb
    @twobomb
    Время чат гпт...
    Возможно дальше написана дичь, но это не я писал.
    Для создания GUI в плагине Minecraft вам понадобится использовать API Bukkit/Spigot, который предоставляет необходимые инструменты для работы с интерфейсами пользователя.

    Пример создания GUI без возможности вытаскивания вещей и с поддержкой HEX цветов:
    public class ExampleGUI implements InventoryHolder {
    
        private Inventory inventory;
    
        public ExampleGUI() {
            // Создаем GUI с 27 ячейками и заголовком "Пример GUI"
            this.inventory = Bukkit.createInventory(this, 27, ChatColor.translateAlternateColorCodes('&', "Пример GUI"));
            // Добавляем предметы в инвентарь
            inventory.addItem(new ItemStack(Material.DIAMOND), new ItemStack(Material.GOLD_INGOT), new ItemStack(Material.IRON_INGOT));
        }
    
        @Override
        public Inventory getInventory() {
            return inventory;
        }
    
        public void openGUI(Player player) {
            // Открываем GUI для игрока
            player.openInventory(inventory);
        }
    
        @EventHandler
        public void onInventoryClick(InventoryClickEvent event) {
            // Отменяем возможность вытаскивания предметов из GUI
            if (event.getInventory().getHolder() instanceof ExampleGUI) {
                event.setCancelled(true);
            }
        }
    }

    Тута сломался чат пришло перегенрить и он выдал еще один альтернативный код...

    public class MyPlugin extends JavaPlugin implements Listener {
    
        private Inventory myGui;
    
        @Override
        public void onEnable() {
            // создание GUI
            myGui = Bukkit.createInventory(null, 9, "My GUI");
    
            // добавление предметов в GUI
            ItemStack item = new ItemStack(Material.DIAMOND);
            ItemMeta meta = item.getItemMeta();
            meta.setDisplayName(ChatColor.GREEN + "Diamond");
            item.setItemMeta(meta);
            myGui.addItem(item);
    
            // регистрация обработчика событий
            getServer().getPluginManager().registerEvents(this, this);
        }
    
        @EventHandler
        public void onPlayerInteract(PlayerInteractEvent event) {
            if (event.getAction() == Action.RIGHT_CLICK_BLOCK) {
                // открытие GUI при нажатии правой кнопки мыши на блоке
                event.getPlayer().openInventory(myGui);
            }
        }
    }

    В этом примере создается GUI, содержащий один предмет - алмаз, и открывается при нажатии правой кнопки мыши на блоке. Обратите внимание, что в примере не предусмотрено перемещение предметов в инвентаре.


    Чтобы изменять/получать NBT у сущности, можно использовать классы NBTTagCompound и NBTTagList из библиотеки NBT. Например, чтобы установить NBT тэг "MyTag" у сущности "entity", можно использовать следующий код:
    NBTTagCompound nbt = new NBTTagCompound();
    nbt.setString("MyTag", "Hello world!");
    ((CraftEntity) entity).getHandle().load(nbt);

    А чтобы получить значение NBT тэга "MyTag" у сущности "entity":
    NBTTagCompound nbt = ((CraftEntity) entity).getHandle().save(new NBTTagCompound());
    String myTagValue = nbt.getString("MyTag");
    Ответ написан
  • Что лучше выучить, Java или C#?

    twobomb
    @twobomb
    Пфф, тоже мне проблема, выучи все. Никогда не понимал людей которые пытаются зациклится на чём-то одном, попробуй всё и если что-то понравится развивайся в этом. Ну два это мало, нужно больше.
    Ответ написан
    Комментировать
  • Выделить числа из строки и найти их сумму в java?

    twobomb
    @twobomb
    String str = text.trim();
    String digits="";
                int sum = 0;
                str+=" ";
                for (int i = 0; i < str.length(); i++) {
                  char chrs = str.charAt(i);
                  if (Character.isDigit(chrs))
                    digits+=chrs;
                  else{
                      if(!digits.equals(""))
                         sum+= Integer.parseInt(digits);
                      digits = "";
                  }
                  
                }
                System.out.println(sum);
    Ответ написан
  • Почему expected 66 а получаем 65?

    twobomb
    @twobomb
    А не смущает int score = (s1 + s3 + s3) / 3; ?
    Ответ написан
    Комментировать
  • Почему цикл for делает 2-3 прохода, если инкримент i++?

    twobomb
    @twobomb
    Объясняю как это работает, ну как я предполагаю по крайней мере.
    Во первых System.in.read читает 1 байт из буфера ввода, во вторых System.in.read блокирует поток пока не появится новый ввод.
    Так вот когда вводим 1 и нажимаем ентер, по идее в поток ввода попадают 3 символа 1 - это что мы ввели \r -возврат каретки \n - новая строка, и сначала он считывает 1 байт который занимает символ 1, заходит в цикл выполняет тело, далее он считывает символ возврата каретки и выполняет тело и потом он считывает символ новой строки и выполняет тело, и далее поток опять блокируется в ожидании ввода.
    НО! Вот с символом "й" и любой русском буквой не все так однозначно, если стоит кодировка utf8 то в ней он помоему занимает 2 байта, и поэтому должно быть 4 прохода, тоесть сначала он считает первый байт символа й, потом второй байт символа й потом возврат каретки, а потом новую строку. Ну возможно у вас используется например Windows1251 которая поддерживает русские буквы и они занимают там как раз 1 байт и поэтому только 3 прохода вместо 4х
    Ответ написан
    Комментировать
  • Что лучше для разработки игр под Android?

    twobomb
    @twobomb
    Выучить основы Java или C# это вообще не проблема, тем более они очень похожи. Вам нужно определится что вы будете делать дальше, если будете использовать движок то определится какой,. Просто с ваших слов звучит так что вот вы сейчас выучите C# и будете без проблем писать игры на любых движках и не парится, только вот на практике бывает так что освоить хотя бы основы движка сложнее чем основы языка. Определяйтесь с движком и учите, не понравится один учите другой, не нужно зацикливаться на чем-то одном.
    Ответ написан
    Комментировать
  • Не рановато мне смотреть в сторону андроид разработчика?

    twobomb
    @twobomb
    8 уровень джавараш, звучит угрожающе. Что там джава, что там джава. Качайте андроид студию, штудируйте андроид сдк и в путь. Начните с создания польского калькулятора, а дальше как пойдет. Все в ваших руках.
    Ответ написан
    Комментировать
  • Какой использовать стек технологий при разработке первого Java web-приложения?

    twobomb
    @twobomb
    Ну например Spring+Vaadin+Hibernate
    Ответ написан
    Комментировать
  • Как вывести таблицу истинности на Java?

    twobomb
    @twobomb
    Помойму как-то так.
    public class Main {
    
        public static void main(String[] args) {
            System.out.println("Таблица истиности для выражения !(!x && y) || (x && !z)");
            System.out.println("  X      Y      Z    !(!x && y) || (x && !z)");
            out(true,true,true);
            out(false,false,false);
            out(true,true,false);
            out(false,false,true);
            out(true,false,true);
            out(false,true,false);
            out(true,false,false);
            out(false,true,true);
    
        }
        public static void out(boolean x,boolean y,boolean z){
            System.out.println((x?"Истина ":" Ложь  ")+(y?"Истина ":" Ложь  ")+(z?"Истина ":" Ложь  ")+(!(!x && y) || (x && !z)?"         Истина":"         Ложь"));
        }
    }


    Console
    Таблица истиности для выражения !(!x && y) || (x && !z)
    X Y Z !(!x && y) || (x && !z)
    Истина Истина Истина Истина
    Ложь Ложь Ложь Истина
    Истина Истина Ложь Истина
    Ложь Ложь Истина Истина
    Истина Ложь Истина Истина
    Ложь Истина Ложь Ложь
    Истина Ложь Ложь Истина
    Ложь Истина Истина Ложь
    Ответ написан
    2 комментария
  • (Вопрос для андроид гуру)Почему не сворачивается шторка при нажатии на кнопку в кастомной нотификации?

    twobomb
    @twobomb Автор вопроса
    Разобрался! Отвечу сам на свой вопрос, может кому понадобится.
    Чтобы установить событие на свои кнопки в своей кастомной Big Notification. Следует использовать такую конструкцию.
    Intent tt = new Intent(this, SettingsActivity.class);
                        TaskStackBuilder ss = TaskStackBuilder.create(this);
                        stackBuilder.addParentStack(MainActivity.class);
                        stackBuilder.addNextIntent(tt);
                        PendingIntent rr = stackBuilder.getPendingIntent(
                                0, PendingIntent.FLAG_UPDATE_CURRENT);
                        expandedView.setOnClickPendingIntent(R.id.notif_btn_settings, rr);
    //notif_btn_settings - ид Кнопки, expandedView это мой RemoteViews

    Обязательно стоит использовать TaskStackBuilder иначе активити будет открыватся, но шторка не закроется сама!
    Так же не нужен класс ресивер MyButtonListener, флаг FLAG_ACTIVITY_NEW_TASK и прочее...
    Ответ написан
    Комментировать
  • Как лучше сделать?

    twobomb
    @twobomb
    Все вычисления которые можно скидывать на субд, всегда скидывайте на субд!
    Ответ написан
    4 комментария
  • Intellij IDEA для Unity?

    twobomb
    @twobomb
    Я вообще использовал Visual Studio 2010, юнька сама ее находит при запуске и в настройках можно ее выбрать как среду разработки. На счет Intellij IDEA не знаю, использовал ее когда программировал на Java, разве там и на C# можно?
    Ответ написан
    2 комментария
  • Как вывести данные полученные асинхронно TextView в UI поток?

    twobomb
    @twobomb
    Может как нибудь так. В общем гуглите
    Display.getDefault().asyncExec(new Runnable() {
        public void run() {
            someSwtLabel.setText("Complete!");
        }
    });
    Ответ написан
  • Как понять в JAVA конструкции типа: объект.объект.метод(); и объект.метод().метод();?

    twobomb
    @twobomb
    public class object1{
               public object2 myobj;
                object1(){
                        myobj = new object2();
                  }
           public object2 getMyobj(){
                 return myobj;
          }
    }
    public class object2{
                object2(){}
                 public void sayHello(){
                         System.out.println("Hello");
                   }
    }
    objects1 obj;
    obj.myobj.sayHello();
    obj.getMyobj().sayHello();

    Console Result:
    Hello
    Hello
    Ответ написан
    Комментировать