Can somebody help me to generate QR code in Minecraft?

Discussion in 'Plugin Development' started by tf2_mandeokyi, Nov 26, 2018.

Thread Status:
Not open for further replies.
  1. Offline

    tf2_mandeokyi

    I'm going to make QR code in Minecraft using bukkit by Zxing QR code generator. so I coded like this:
    Code:
    package me.QRcode;
    
    import java.util.EnumMap;
    import java.util.Map;
    
    import org.bukkit.ChatColor;
    import org.bukkit.Location;
    import org.bukkit.Material;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import org.bukkit.event.Listener;
    import org.bukkit.plugin.java.JavaPlugin;
    
    import com.google.zxing.BarcodeFormat;
    import com.google.zxing.EncodeHintType;
    import com.google.zxing.WriterException;
    import com.google.zxing.common.BitMatrix;
    import com.google.zxing.qrcode.QRCodeWriter;
    import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
    public class Main extends JavaPlugin implements Listener{
       
        public void onEnable() {
            getServer().
                getConsoleSender().
                    sendMessage(ChatColor.GREEN + "\n\n\"QR code\" plugin has been enabled.\n\n");
        }
       
        public void onDisable() {
            getServer().
                getConsoleSender().
                    sendMessage(ChatColor.RED + "\n\n\"QR code\" plugin has been disabled.\n\n");
        }
       
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
            Player player = (Player) sender;
           
            if(sender instanceof Player) {
                String commandInput = cmd.getName().toLowerCase();
               
                switch(commandInput) {
                    case "qrcodegen":
                        Location pLoc = player.getLocation();
                        if(args.length == 0) {
                            sender.sendMessage(ChatColor.RED + "Usage: /qrcodegen <text>");
                        }
                        else {
                            String myCodeText = String.join(" ",args);
                            int size = 20;
                            try {
                                Map<EncodeHintType, Object> hintMap = new EnumMap<EncodeHintType, Object>(EncodeHintType.class);
                                hintMap.put(EncodeHintType.CHARACTER_SET, "UTF-8");
                               
                                hintMap.put(EncodeHintType.MARGIN, 1);
                                hintMap.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L);
                    
                                QRCodeWriter qrCodeWriter = new QRCodeWriter();
                                BitMatrix byteMatrix = qrCodeWriter.encode(myCodeText, BarcodeFormat.QR_CODE, size, size, hintMap);
                                int CrunchifyWidth = byteMatrix.getWidth();
                               
                                Material White = Material.WHITE_CONCRETE;
                                Material Black = Material.BLACK_CONCRETE;
                               
                                for (int i = 0; i < CrunchifyWidth; i++) {
                                    for (int j = 0; j < CrunchifyWidth; j++) {
                                        if (byteMatrix.get(i, j)) {
                                            player.getWorld().getBlockAt(pLoc.add(i,0,j)).setType(Black);
                                        }
                                        else {
                                            player.getWorld().getBlockAt(pLoc.add(i,0,j)).setType(White);
                                        }
                                    }
                                    System.out.println();
                                }
                            } catch (WriterException e) {
                                e.printStackTrace();
                            }
                        }
                        return true;
                }
            }
            return false;
        }
        // Used External JARs : Bukkit 1.13.1, Zxing 3.3.3
    }
    plugin.yml:
    Code:
    name: QRCodeGenerator
    author: tf2_mandeokyi
    version: 1.0
    main: me.QRcode.Main
    description: in Minecraft
    
    api-version: 1.13
    
    commands:
      qrcodegen:
        description: It generates QR code at where you are standing.
        usage: /qrcodegen <text>
    but this error occurs.
    Code:
    org.bukkit.plugin.InvalidPluginException: java.lang.NoClassDefFoundError: com/google/zxing/WriterException
            at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:133) ~[craftbukkit-1.13.1.jar:git-Bukkit-4228a56]
            at org.bukkit.plugin.SimplePluginManager.loadPlugin(SimplePluginManager.java:326) ~[craftbukkit-1.13.1.jar:git-Bukkit-4228a56]
            at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager.java:248) [craftbukkit-1.13.1.jar:git-Bukkit-4228a56]
            at org.bukkit.craftbukkit.v1_13_R2.CraftServer.loadPlugins(CraftServer.java:315) [craftbukkit-1.13.1.jar:git-Bukkit-4228a56]
            at org.bukkit.craftbukkit.v1_13_R2.CraftServer.reload(CraftServer.java:775) [craftbukkit-1.13.1.jar:git-Bukkit-4228a56]
            at org.bukkit.Bukkit.reload(Bukkit.java:537) [craftbukkit-1.13.1.jar:git-Bukkit-4228a56]
            at org.bukkit.command.defaults.ReloadCommand.execute(ReloadCommand.java:27) [craftbukkit-1.13.1.jar:git-Bukkit-4228a56]
            at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:140) [craftbukkit-1.13.1.jar:git-Bukkit-4228a56]
            at org.bukkit.craftbukkit.v1_13_R2.CraftServer.dispatchCommand(CraftServer.java:675) [craftbukkit-1.13.1.jar:git-Bukkit-4228a56]
            at org.bukkit.craftbukkit.v1_13_R2.CraftServer.dispatchServerCommand(CraftServer.java:661) [craftbukkit-1.13.1.jar:git-Bukkit-4228a56]
            at net.minecraft.server.v1_13_R2.DedicatedServer.aU(DedicatedServer.java:417) [craftbukkit-1.13.1.jar:git-Bukkit-4228a56]
            at net.minecraft.server.v1_13_R2.DedicatedServer.b(DedicatedServer.java:377) [craftbukkit-1.13.1.jar:git-Bukkit-4228a56]
            at net.minecraft.server.v1_13_R2.MinecraftServer.a(MinecraftServer.java:792) [craftbukkit-1.13.1.jar:git-Bukkit-4228a56]
            at net.minecraft.server.v1_13_R2.MinecraftServer.run(MinecraftServer.java:695) [craftbukkit-1.13.1.jar:git-Bukkit-4228a56]
            at java.lang.Thread.run(Thread.java:748) [?:1.8.0_181]
    Caused by: java.lang.NoClassDefFoundError: com/google/zxing/WriterException
            at java.lang.Class.forName0(Native Method) ~[?:1.8.0_181]
            at java.lang.Class.forName(Class.java:348) ~[?:1.8.0_181]
            at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.java:54) ~[craftbukkit-1.13.1.jar:git-Bukkit-4228a56]
            at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:129) ~[craftbukkit-1.13.1.jar:git-Bukkit-4228a56]
            ... 14 more
    Caused by: java.lang.ClassNotFoundException: com.google.zxing.WriterException
            at java.net.URLClassLoader.findClass(URLClassLoader.java:381) ~[?:1.8.0_181]
            at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:130) ~[craftbukkit-1.13.1.jar:git-Bukkit-4228a56]
            at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:76) ~[craftbukkit-1.13.1.jar:git-Bukkit-4228a56]
            at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[?:1.8.0_181]
            at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:1.8.0_181]
            at java.lang.Class.forName0(Native Method) ~[?:1.8.0_181]
            at java.lang.Class.forName(Class.java:348) ~[?:1.8.0_181]
            at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.java:54) ~[craftbukkit-1.13.1.jar:git-Bukkit-4228a56]
            at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:129) ~[craftbukkit-1.13.1.jar:git-Bukkit-4228a56]
            ... 14 more
    
    It seems that there is no class "com.google.zxing.WriterException" what it really exists. Can somebody help me solving this error?
    (QR code generator example code)
    (Zxing 3.3.3 download link)
     
  2. Offline

    timtower Administrator Administrator Moderator

    @tf2_mandeokyi How are you importing the zxing in the server? Did you package it with your plugin jar?
     
  3. Offline

    tf2_mandeokyi

    Uhmm.... How to do that?
     
  4. Offline

    timtower Administrator Administrator Moderator

    Depends on your IDE, Eclipse has an option for it when you hit export.
     
  5. Offline

    The_Spaceman

    Intellij has an option in Project Structure -> Artifacts -> Output Layout, where you add your available Element (in this case zxing)
     
  6. Offline

    tf2_mandeokyi

    I'm using Eclipse, but I can't find that option. Where is it?
     
  7. Offline

    timtower Administrator Administrator Moderator

    Export as executable jar file, package required libraries into generated JAR.
    Or you make something that loads the jar itself after you moved it to a good location.
     
Thread Status:
Not open for further replies.

Share This Page