Differences

On this page you will find several examples of the differences between Essential's and WorldProtect's code base. All Essentials code has been taken from their Open Source GIT repository.

The Ban Command

How Essentials Does It

package com.earth2me.essentials.commands;

import com.earth2me.essentials.I18n;
import com.earth2me.essentials.IEssentials;
import com.earth2me.essentials.OfflinePlayer;
import com.earth2me.essentials.User;
import com.earth2me.essentials.Util;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.bukkit.Server;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;

public class Commandban extends EssentialsCommand
{
  public Commandban()
  {
    super("ban");
  }

  public void run(Server server, CommandSender sender, String commandLabel, String[] args)
    throws Exception
  {
    boolean nomatch = false;
    if (args.length < 1)
    {
      throw new NotEnoughArgumentsException();
    }
    User user;
    try
    {
      user = getPlayer(server, args, 0, true);
    }
    catch (NoSuchFieldException e)
    {
      nomatch = true;
      user = this.ess.getUser(new OfflinePlayer(args[0], this.ess));
    }
    if (!user.isOnline())
    {
      if (((sender instanceof Player)) && (!this.ess.getUser(sender).isAuthorized("essentials.ban.offline")))
      {
        sender.sendMessage(I18n._("banExempt", new Object[0]));
      }

    }
    else if ((user.isAuthorized("essentials.ban.exempt")) && ((sender instanceof Player)))
    {
      sender.sendMessage(I18n._("banExempt", new Object[0]));
      return;
    }

    String senderName = (sender instanceof Player) ? ((Player)sender).getDisplayName() : "Console";
    String banReason;
    String banReason;
    if (args.length > 1)
    {
      banReason = Util.replaceFormat(getFinalArg(args, 1).replace("\\n", "\n").replace("|", "\n"));
    }
    else
    {
      banReason = I18n._("defaultBanReason", new Object[0]);
    }

    user.setBanReason(I18n._("banFormat", new Object[] { banReason, senderName }));
    user.setBanned(true);
    user.setBanTimeout(0L);
    user.kickPlayer(I18n._("banFormat", new Object[] { banReason, senderName }));

    server.getLogger().log(Level.INFO, I18n._("playerBanned", new Object[] { senderName, user.getName(), banReason }));

    if (nomatch) {
      sender.sendMessage(I18n._("userUnknown", new Object[] { args[0] }));
    }

    for (Player onlinePlayer : server.getOnlinePlayers())
    {
      User player = this.ess.getUser(onlinePlayer);
      if ((onlinePlayer == sender) || (player.isAuthorized("essentials.ban.notify")))
      {
        onlinePlayer.sendMessage(I18n._("playerBanned", new Object[] { senderName, user.getName(), banReason }));
      }
    }
  }
}

Essentials uses 84 lines of code equivalent, and creates various new Objects during the simple ban process. They import quite a few additional packages, and use equivalent API calls to other packages inside the Essentials plugin. All in all, efficient, and standard practice.

How WorldProtect Does It

package com.bjornke.worldprotect.commands;

import com.bjornke.worldprotect.utilities;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.OfflinePlayer;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;

public class ban
{
  public String name = "ban";
  public String description = "Ban a player forever!";
  public String usage = "/ban <player name> [reason]";
  public String permission = "wp.ban";
  public String permdefault = "op";
  public String[] aliases = { "wpban", "b" };
  public boolean events = false;

  public void execute(String[] args, CommandSender sender, Command cmd)
  {
    if (!sender.hasPermission(this.permission)) {
      utilities.sendNoPerm(sender);
      return;
    }
    if (args != null)
      try {
        if ((Bukkit.getPlayer(args[0]) != null) && (Bukkit.getPlayer(args[0]).isOnline())) {
          String reason = "Banned by an admin using WorldProtect!";
          try {
            reason = args[1];
          } catch (Exception e) {
          }
          Bukkit.getPlayer(args[0]).setBanned(true);
          Bukkit.getPlayer(args[0]).kickPlayer(reason);
          sender.sendMessage(ChatColor.GREEN + "Success! " + ChatColor.GRAY + "Banned player " + ChatColor.DARK_RED + args[0] + ChatColor.GRAY + " forever!");
        } else if (Bukkit.getOfflinePlayer(args[0]) != null) {
          Bukkit.getOfflinePlayer(args[0]).setBanned(true);
          sender.sendMessage(ChatColor.GREEN + "Success! " + ChatColor.GRAY + "Banned player " + ChatColor.DARK_RED + args[0] + ChatColor.GRAY + " forever!");
        }
      } catch (Exception e) {
        utilities.sendCError(cmd, sender);
      }
    else
      utilities.sendCError(cmd, sender);
  }
}

WorldProtect's ban command uses 54 lines of code equivalent, and has a structure at the top defining the command, as all WP commands are modular and can be unloaded/loaded dynamically. WP's ban command does everything Essential's ban command does, in fewer lines of code. WP also auto-corrects for any Exceptions thrown during banning process by negating them and using default values.


Comments

Posts Quoted:
Reply
Clear All Quotes