Solved Reading MetadataValue

Discussion in 'Plugin Development' started by 79Codes, Jul 24, 2019.

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

    79Codes

    Hello there.
    Metadata is registering, but when I check the block metadata, there`s nothing.
    Main Class (open)

    Code:
    import java.io.File;
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.configuration.file.FileConfiguration;
    import org.bukkit.configuration.file.YamlConfiguration;
    import org.bukkit.entity.Player;
    import org.bukkit.event.Listener;
    import org.bukkit.plugin.Plugin;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class Main extends JavaPlugin implements Listener {
       
        public static String message(String text, Player p) {
            String unftext = ChatColor.translateAlternateColorCodes('&', text);
            String form = unftext.replace("%%player%%", p.getName());
            return form;
        }
       
        public static String message(String text) {
            return message(text, null);
        }
       
        public void onEnable() {
            main = this;
            Bukkit.getLogger().info("Parkour by _SEVENTYNINE_ has been launched successfully");
            Bukkit.getServer().getPluginManager().registerEvents(this, this);
            Bukkit.getServer().getPluginManager().registerEvents(new CordRegister(), this);
            Bukkit.getServer().getPluginManager().registerEvents(new PlaceParkourBlock(), this);
            getCommand("parkour").setExecutor(new ParkourCommand());
            getCommand("parkourmanagement").setExecutor(new PlaceParkourBlock());
            if (!messagesfile.exists()) {
                saveResource("messages.yml", false);
            }
        }
       
        public void onDisable() {}
       
        public static Plugin getInstance() {
            return main;
        }
       
        String getmessageyaml(String string) {
            if (string == null) {
                return "No Message";
            } else {
                return messages.getString(string);
            }
        }
       
        public static Main main;
       
        File messagesfile = new File(this.getDataFolder(), "messages.yml");
        FileConfiguration messages = YamlConfiguration.loadConfiguration(messagesfile);
    
    }

    Checker (open)

    Code:
    import java.util.HashMap;
    import org.bukkit.Location;
    import org.bukkit.Material;
    import org.bukkit.block.BlockFace;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.player.PlayerMoveEvent;
    
    public class CordRegister implements Listener {
       
        static CordRegister cordregister;
        static HashMap<Player, Location> pla = new HashMap<Player, Location>();
       
        @EventHandler
        public void CoordRegister(PlayerMoveEvent e) {
            Player p = e.getPlayer();
            if (e.getTo().getBlock().getRelative(BlockFace.DOWN).getType() == Material.GOLD_BLOCK) {
                if (pla.get(p) == null) {
                    pla.put(p, p.getLocation());
                    p.sendMessage("Parkour started");
                    p.sendMessage(e.getTo().getBlock().getMetadata("yes") + ""); // Checker is here
                    }
                if (pla.get(p) != p.getLocation()) {
                    if (!pla.containsValue(p.getLocation())) {
                        if (pla.get(p).getBlockX() != p.getLocation().getBlockX() && pla.get(p).getBlockY() != p.getLocation().getBlockY() && pla.get(p).getBlockZ() != p.getLocation().getBlockZ()) {
                            p.sendMessage("Checkpoint");
                            pla.replace(p, p.getLocation());
                        }
                    }
                }
            }
        }
    }

    Register (open)

    Code:
        @EventHandler
        public void placegold(BlockPlaceEvent e) {
            e.getBlock().setMetadata("yes", new FixedMetadataValue(Main.getInstance(), "no")); // "yes" and "no" just for example
        }
     
  2. Offline

    Machine Maker

    So you are looking at the block given by PlayerMoveEvent#getTo(). Are you sure that is the block below the player and not the air block the player is occupying?

    Also, I believe that Block MetaData is lost when the server reloads.
     
  3. Offline

    79Codes

    Block below is checked by condition
    Code:
    e.getTo().getBlock().getRelative(BlockFace.DOWN).getType() == Material.GOLD_BLOCK
    I reload the server before place block.
     
  4. Offline

    Machine Maker

    So I'm not sure what your question is at this point. You are storing some metadata in the gold block that players will walk on. But you aren't checking if the gold block has the metadata, you are checking if the block ABOVE the gold block has it.
     
Thread Status:
Not open for further replies.

Share This Page