MemorySection[path='messages', root='YamlConfiguration']

Discussion in 'Plugin Development' started by Deducts, Feb 17, 2020.

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

    Deducts

    I believe this comes under my configuration but can't quite put my finger on it. This displays when I type /br list in game. br list is supposed to display the list of blocks that has been disabled from being placed.

    here are the files;
    BlockRestrict.java
    Code:
    package com.sylvcraft;
    
    import org.bukkit.plugin.java.JavaPlugin;
    
    import java.util.Map;
    
    import org.bukkit.ChatColor;
    import org.bukkit.command.CommandSender;
    import org.bukkit.plugin.PluginManager;
    import com.sylvcraft.events.BlockPlace;
    
    import com.sylvcraft.commands.br;
    
    
    public class BlockRestrict extends JavaPlugin {
      @Override
      public void onEnable() {
        PluginManager pm = getServer().getPluginManager();
        pm.registerEvents(new BlockPlace(this), this);
        getCommand("br").setExecutor(new br(this));
        saveDefaultConfig();
        getServer().getConsoleSender().sendMessage(ChatColor.GREEN + "\n\n\nBlockRestricter has been Enabled\n\n");
      }
      public void msg(String msgCode, CommandSender sender) {
          String tmp = getConfig().getString("messages." + msgCode, msgCode) + ' ';
          if (tmp.trim().equals("")) return;
          for (String m : tmp.split("%br%")) {
              sender.sendMessage(ChatColor.translateAlternateColorCodes('&', m));
          }
      }
    
      public void msg(String msgCode, CommandSender sender, Map<String, String> data) {
          String tmp = getConfig().getString("messages." + msgCode, msgCode) + ' ';
          if (tmp.trim().equals("")) return;
          for (Map.Entry<String, String> mapData : data.entrySet()) {
            tmp = tmp.replace(mapData.getKey(), mapData.getValue());
          }
          msg(tmp, sender);
      }
      public void onDisable() {
          getServer().getConsoleSender().sendMessage(ChatColor.RED + "\n\n\nBlockRestricter has been Disabled");
      }
    }
    
    br.java
    Code:
    package com.sylvcraft.commands;
    
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import org.bukkit.Material;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandExecutor;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import com.sylvcraft.BlockRestrict;
    
    public class br implements CommandExecutor {
      BlockRestrict plugin;
      public br(BlockRestrict instance) {
        plugin = instance;
      }
    
        @Override
      public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        try {
            String targetBlock = ""; Player p = (sender instanceof Player)?(Player)sender:null;
            if (!sender.hasPermission("blockrestrict.admin")) {
                plugin.msg("access-denied", sender);
                return true;
            }
          
            if (args.length == 0) {
                if (!(sender instanceof Player)) {
                    plugin.msg("specify-block", sender);
                    return true;
                }
                if (!p.getInventory().getItemInMainHand().getType().isBlock()) {
                    plugin.msg("not-a-block", sender);
                    return true;
                }
              
                targetBlock = p.getInventory().getItemInMainHand().getType().name();
            } else {
                if (args[0].equalsIgnoreCase("list")) {
                    listMaterials(sender);
                    return true;
                }
              
                Material m = Material.matchMaterial(args[0]);
                if (m == null) {
                    plugin.msg("invalid-item", sender);
                    return true;
                }
                if (!m.isBlock()) {
                    plugin.msg("not-a-block", sender);
                    return true;
                }
              
                targetBlock = m.name();
            }
          
            List<String> blocks = plugin.getConfig().getStringList("blocks");
            if (blocks.contains(targetBlock)) {
                blocks.remove(targetBlock);
                plugin.msg("removed", sender);
            } else {
                blocks.add(targetBlock);
                plugin.msg("added", sender);
                Map<String, String> data = new HashMap<String, String>();
                plugin.msg("blocks", sender, data);
            }
          
            plugin.getConfig().set("blocks", blocks);
            plugin.saveConfig();
          return true;
        } catch (Exception ex) {
          return false;
        }
      }
      
        void listMaterials(CommandSender sender) {
            Map<String, String> data = new HashMap<String, String>();
            plugin.msg("list-header", sender);
                plugin.msg("", sender, data);
            }
        }
    
    
    BlockPlace.java
    Code:
    package com.sylvcraft.events;
    
    import java.util.List;
    
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import com.sylvcraft.BlockRestrict;
    import org.bukkit.event.block.BlockPlaceEvent;
    
    
    public class BlockPlace implements Listener {
      BlockRestrict plugin;
      public BlockPlace(BlockRestrict instance) {
        plugin = instance;
      }
    
        @EventHandler
      public void onBlockPlace(BlockPlaceEvent e) {
            if (e.getPlayer().hasPermission("blockrestrict.bypass")) return;
            if (e.getPlayer().hasPermission("blockrestrict.bypass." + e.getBlockPlaced().getType().name().toLowerCase())) return;
            List<String> blocks = plugin.getConfig().getStringList("blocks");
            if (!blocks.contains(e.getBlockPlaced().getType().name())) return;
    
            plugin.msg("not-allowed", e.getPlayer());
            e.setCancelled(true);
      }
    }
    
    Code:
    messages:
      access-denied: '&cAccess denied!'
      specify-block: You must pass the block material name
      not-a-block: '&cThat is not a block!'
      invalid-item: '&cThat is not a valid material!'
      removed: '&eThat block is now unrestricted.'
      added: '&eThat block is now restricted.'
      not-allowed: '&cYou are not allowed to place that block!'
      list-header: '&eBlock based materials:%br%%br%'
      list-data: '&6%value%'
    blocks:
    
    
    Code:
    name: BlockRestrict
    author: JerryEgg
    main: com.sylvcraft.BlockRestrict
    version: 1.0
    description: Block the placement of blocks
    commands:
      br:
        description: Plugin command
        aliases: ["blockdisable", "blockrestrict", "bb"]
      br list:
        description: Plugin command
    
    
    Any assistance would be appreciated.
     
    Last edited by a moderator: Feb 17, 2020
  2. Offline

    KarimAKL

    @Deducts
    1. What is the output?
    2. What is your desired output?
     
  3. Offline

    Strahan

    lol, it's funny to see my message handling code in a random Bukkit post :) You're not implementing it properly. The constructor that takes a Map is meant for messages that contain variables. As such, you need to be populating the map with whatever variables the message needs. So like for listing, list-data has variable %value% so you need to put the value in the map.

    Code:
    void listMaterials(CommandSender sender) {
      Map<String, String> data = new HashMap<String, String>();
      plugin.msg("list-header", sender);
      for (String block : plugin.getConfig().getStringList("blocks")) {
        data.put("%value%", block);
        plugin.msg("list-data", sender, data);
      }
    }
    Though I'd add support for the event there are no blocks restricted:

    Code:
    void listMaterials(CommandSender sender) {
      Map<String, String> data = new HashMap<String, String>();
      List<String> blocks = plugin.getConfig().getStringList("blocks");
      if (blocks.size() == 0) {
        plugin.msg("list-empty", sender);
        return;
      }
    
      plugin.msg("list-header", sender);
      for (String block : blocks) {
        data.put("%value%", block);
        plugin.msg("list-data", sender, data);
      }
    }
     
Thread Status:
Not open for further replies.

Share This Page