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

Помогите Фотография на карте

Тема в разделе "Разработка плагинов для новичков", создана пользователем LetsDank, 5 окт 2017.

Статус темы:
Закрыта.
  1. Автор темы
    LetsDank

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

    Баллы:
    61
    Имя в Minecraft:
    LetsDank
    Не могу найти конкретно необходимый код для решения проблемы. Короче, мне надо превратить фото в карту, чтобы можно было задавать свой номер.
     
  2. Dan_Ender

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

    Баллы:
    76
    Код:
    Player p = Bukkit.getPlayer("justInitialization");
               
    MapView map = Bukkit.createMap(p.getWorld());
    //clear map
    Iterator<MapRenderer> iter = map.getRenderers().iterator();
    while(iter.hasNext()){
        map.removeRenderer(iter.next());
    }
               
    //draw
    map.addRenderer(new PictureDrawer(new File(getDataFolder()+"/img/"+args[0]),Scale.NORMAL,0,0));
               
    p.getInventory().addItem(new ItemStack(Material.MAP,1,map.getId()));
    Код:
    package main;
    
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
    
    import javax.imageio.ImageIO;
    
    import org.bukkit.entity.Player;
    import org.bukkit.map.MapCanvas;
    import org.bukkit.map.MapRenderer;
    import org.bukkit.map.MapView;
    import org.bukkit.map.MapView.Scale;
    
    public class PictureDrawer extends MapRenderer {
       
        File picture;
        Scale scale;
        boolean drawed = false;
        int x;
        int y;
       
        public PictureDrawer(File picture,Scale scale,int x,int y) {
            this.picture = picture;
            this.scale = scale;
            this.x = x;
            this.y = y;
        }
    
        @Override
        public void render(MapView map, MapCanvas canvas, Player p) {
            if (drawed) return;
            BufferedImage img = null;
            try {
                img = ImageIO.read(picture);
            } catch (IOException e) {e.printStackTrace();}
            map.setScale(scale);
            canvas.drawImage(x,y, img);
            drawed = true;
        }
     
    }
    
     
  3. Автор темы
    LetsDank

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

    Баллы:
    61
    Имя в Minecraft:
    LetsDank
    Извините, что с задержкой, но можете объяснить, как выполняется
    данный процесс?
     
  4. Dan_Ender

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

    Баллы:
    76
    Создание карты:
    Очистка всего, что нарисовало ведро(указатель игрока и т.д.)
    Установка и создание своего MapRenderer'а, тоесть отрисовщика.
    Установка 'приближения' карты и отрисовка картинки.
     
  5. Автор темы
    LetsDank

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

    Баллы:
    61
    Имя в Minecraft:
    LetsDank
    А можно при запуске плагина без участия игрока все выполнялось?
     
  6. Dan_Ender

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

    Баллы:
    76
    Да, игрок в данном случаи только для выдачи предмета, зная id карты, можно её выдать.
     
  7. Автор темы
    LetsDank

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

    Баллы:
    61
    Имя в Minecraft:
    LetsDank
    Понял, спасибо!
     
  8. Автор темы
    LetsDank

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

    Баллы:
    61
    Имя в Minecraft:
    LetsDank
    Стоп, а можно задать определенный id карты? Там не написано, пожалуйста!
     
  9. Dan_Ender

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

    Баллы:
    76
    Bukkit.getMap(short id);
     
  10. Автор темы
    LetsDank

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

    Баллы:
    61
    Имя в Minecraft:
    LetsDank
    Мда. После вставки этого кода, у меня вылезла ошибка.
    Код:
    [18:01:12] [Server thread/ERROR]: Error occurred while enabling Computer v0.3.1 (Is it up to date?)
    java.lang.NullPointerException: null
        at net.letsdank.computer.Drawing.setPictureToMap(Drawing.java:33) ~[?:?]
        at net.letsdank.computer.ComputerPlugin.onEnable(ComputerPlugin.java:85) ~[?:?]
        at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:264) ~[spigot.jar:git-Spigot-596221b-9a1fc1e]
        at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:337) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:402) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at org.bukkit.craftbukkit.v1_12_R1.CraftServer.enablePlugin(CraftServer.java:374) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at org.bukkit.craftbukkit.v1_12_R1.CraftServer.enablePlugins(CraftServer.java:323) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at org.bukkit.craftbukkit.v1_12_R1.CraftServer.reload(CraftServer.java:745) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at org.bukkit.Bukkit.reload(Bukkit.java:525) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at org.bukkit.command.defaults.ReloadCommand.execute(ReloadCommand.java:25) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at org.bukkit.craftbukkit.v1_12_R1.CraftServer.dispatchCommand(CraftServer.java:641) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at org.bukkit.craftbukkit.v1_12_R1.CraftServer.dispatchServerCommand(CraftServer.java:627) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at net.minecraft.server.v1_12_R1.DedicatedServer.aP(DedicatedServer.java:443) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at net.minecraft.server.v1_12_R1.DedicatedServer.D(DedicatedServer.java:406) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at net.minecraft.server.v1_12_R1.MinecraftServer.C(MinecraftServer.java:678) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:576) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at java.lang.Thread.run(Unknown Source) [?:1.8.0_144]
    [18:01:12] [Server thread/INFO]: Server permissions file permissions.yml is empty, ignoring it
    [18:01:12] [Server thread/INFO]: CONSOLE: [0;32;1mReload complete.[m
    
    Код:
        @SuppressWarnings("deprecation")
        public static void setPictureToMap(String path, int id) {
            // render image maps
            MapView map = Bukkit.getMap((short)id);
            if (ComputerPlugin.isBeta)
                System.out.println("Creating map, id: " + id);
            // clear map
            Iterator<MapRenderer> iter = map.getRenderers().iterator(); // <-- Здесь ошибка
            while (iter.hasNext()) {
                map.removeRenderer(iter.next());
            }
            
            // draw picture
            map.addRenderer(new PictureRenderer(new File(path), Scale.NORMAL, 0, 0));
            if (ComputerPlugin.isBeta)
                System.out.println("Drawing picture: " + path + " with id: " + id);
        }
     
  11. Dan_Ender

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

    Баллы:
    76
    Карту не нашел.
     
  12. Автор темы
    LetsDank

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

    Баллы:
    61
    Имя в Minecraft:
    LetsDank
    Но самое главное, что при инициализации переменой не выдает NullPointerException. Тогда попытаюсь что-то сделать, а если получится, то напишу тут результат.
     
  13. Автор темы
    LetsDank

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

    Баллы:
    61
    Имя в Minecraft:
    LetsDank
    Не получается. Мне надо сделать карту с определенным номером, чтобы не было ошибок, что не найдена карта. Мне надо ее сделать с самого начала.
     
  14. Автор темы
    LetsDank

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

    Баллы:
    61
    Имя в Minecraft:
    LetsDank
    Можно заранее сделать файлы с содержанием картины и с подписанным id. Пример: map_10.dat
    Закрыто.
     
Статус темы:
Закрыта.

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