[INACTIVE][ECON]SignTrader 1.0.7 - Trading with signs! (617)

Discussion in 'Inactive/Unsupported Plugins' started by darknesschaos, Feb 3, 2011.

  1. Offline

    darknesschaos

    SignTrader - Trade with Signs!
    Version: v1.0.7 - CB (617) tested
    [wheatsprout]Description[wheatsprout]
    This Bukkit plugin allows servers to use signs as a functioning shop tool. Simply set the sign in the appropriate format, optionally link it to a chest and you can have a sign that either vends from a chest you own or you can set the sign to sell to users items they normally couldn't get as something like a modified /give with a set location. Simply punch the sign to get a little more information to understand what it does and how to use it.

    [wheatsprout]Commands[wheatsprout]
    /signtrader -s p - set the sign that you punch, the 'p' is optional and makes it persist.
    /signtrader -sc p - link signs and chests to each other, must be within 40 blocks and on the same world and the 'p' is optional
    /getdata - returns the data of the item in hand (name, amount, and durability.)

    [wheatsprout]Other Plugin Support[wheatsprout]
    You don't need any of these for this plugin to work.​
    Supports protection from LWC, (2.0 only) with lwc installed SignTrader forces players to sell from chests that they own.​
    Supports Permissions from TheYeti (2.5.4 tested) with the following nodes This defaults to op.txt if not present:​
    • signtrader.MakeGlobalSign - so the player can activate "Global" signs defa
    • signtrader.MakePersonalSign - so the player can activate "Personal" signs
    • signtrader.admin.BreakAnySign - so the player can break any sign (duh)
    • signtrader.Use - so the player can use any player sign or activated Global sign
    • signtrader.admin.SetOwner - so the player can set the owner of signs.
    Supports iConomy (4.0 +) for usage with the local money system.


    [wheatsprout]Sign Format[wheatsprout]
    The sign format is as follows:​
    Line one - Global or Personal - denotes sign type, personal pulls from chests, Global doesn't use chests.​
    Line two - amount:ItemType:durability or amount:$ - this is the payment line (what the chest will get from the player) amount is how much the player wants to recieve, ItemType is the item number of the item they want to recieve from player if the other is chosen it will be the amount of money the sign owner wants to get from the player.​
    Line three - amount:ItemType:durability or amount:$ - Similarly to line two, this is what is removed from the sign owner and given to the player.​
    Line four - leave this one alone, [Activated] is put in the line to show it is an active sign.​
    Example 1) - trade sign​
    Line # - text​
    1 - Global​
    2 - 1:3​
    3 - 1:35:1​
    This sign trades for dirt and gives the user orange wool.​
    Example 2) - Sale sign​
    1 - Personal​
    2 - 1:$​
    3 - 64:3​
    This sign takes 1 of iconomy money from the sign user and gives it to the owner, and gives the user 64 dirt.​
    Example 3) - Freebie sign​
    1 - Personal​
    2 - Free​
    3 - 1:3​
    This sign gives 1 dirt for free to the user​
    Example 4) - Purchase Sign​
    1 - Personal​
    2 - 1:3​
    3 - 1:$​
    This sign takes money from the owner and gives to the user and takes 1 dirt from the user and puts it into the chest.​
    [fire]Trouble?[fire]
    When posting issues here please write the following:​
    * What the sign has written on it.​
    * What output you got from the console. (If any)​
    * What you expected to happen.​
    * What actually happened.​
    * What plugins (and their versions) you are using with this (including version number.)​
    * What version of this plugin you are using.​
    Failure to do these will result in you being called an idiot.​
    Show Spoiler


    CHANGELOG:​
    Version 1.0.7​
    *Bugfixing​
    Version 1.0.6​
    * removed the sign breaking prevention function...​
    Version 1.0.5​
    * Fixed an abuse problem​
    * Now protects signs and blocks from destruction of non-op(or permissioned) and non owners of signs (owners of global signs are the ones who placed them.)​
    Version 1.0.3​
    * Updated to be compatable with 600+​
    Version 1.0.2​
    * Fixed link with newest version of lwc.​
    * Null pointer bugfix​
    * Rewired the sign recognition code.​
    Version 1.0.1​
    * Trading sign bugfix​
    * re-added the /signtrader -s command​
    * fixed up command interface a bit​
    * added /getdata so players can find the durability of the item in hand.​
    * added /signtrader -so (OwnerName) needs "signtrader.admin.SetOwner" node or player being op.​
    * now prevents people from linking signs and chests that aren't their own.​
    Version 1.0.0​
    * Monsterous update​
    * Too many to list...​
    Version 0.9.3​
    * Fixed bug where appropriate files were not created.​
    * Cleaned up item.txt creation code.​
    * update to iConomy 3.0 support?​
    Version 0.9.2​
    * Fixed bug where chests weren't detected, possibly other fixes.​
    * still not sure on iConomy, please, someone, let me know.​
    Version 0.9.1​
    * Fixed a bug where signs were not deleted from the sign list when they were destroyed.​
    Version 0.9​
    * Added Sign protecting features​
    * hopefully a fix to iConomy support​
    * now players need to set personal signs.​
    Version 0.8​
    * Added a feature that displays sign information in a more detailed form when the sign is punched.​
    Version 0.7.1​
    * hopefully a bugfix that solves a problem with named worlds​
    * getting chest owner works nicely with LWC​
    Version 0.7​
    * Fixed purchasing and selling to chests (Needs testing.)​
    Version 0.6​
    * Removed incorrect format error.​
    * Chests can now: trade, get donations, give stuff out.​
    * Chests still can't "sell via iConomy"​
    * probably a few other fixes​
    Version 0.5​
    * Release of locking protection for global signs (so not anyone can make them)​
    * signs "should" work fine with chests, however I am afraid they ignore protections.​
    * item blacklisting possible.​
    * permissions support.​
    * iConomy support.​
    * ect.​
    Version 0.1​
    * Initial release of the plugin.​
     

    Attached Files:

    rasse, shadrxninga and NEO like this.
  2. Offline

    codename_B

    I agree. Or at least release the source.
     
  3. Offline

    darknesschaos

    ah, sorry. the source is kinda a mess right now, but there will most definitely be an update this week.
     
  4. Offline

    Felonu

    @darknesschaos
    I believe nijikokun added an api that is supposed to make hooking into economy plugins easier... link is <here>. Hope this helps.. I've been waiting for this to be updated to iCon 5. BTW, love this pluggin.. easiest shop pluggin I have found to use.
     
  5. Offline

    eRko16

    Hi please make an update! Doesn't work on iConomy 5
     
  6. Offline

    darknesschaos

    I am trying to get it to work with register, but I may just only support iConomy, we shall see. I will get something out soon. Sorry for taking so much time.
     
  7. Offline

    Morg141

    Great plugin! I use this and the blacksmith plugin though this doesn't yet work with iconomy 5 as we all know yet blacksmith ONLY works with iconomy 5. So Its one or the other at the moment for me and of course, I staying qith iconomy 4 to keep this working...blacksmith can wait xD Keep up the good work!
     
  8. Offline

    codename_B

    PM me the source, I'll do it for you. I don't care how much of a mess it is, I have a simple way of changing iconomy4 to iconomy5 and making no other changes.
     
  9. Offline

    darknesschaos

    It wasn't that, I could fix that easily. I just was trying to incorperate register. I will revert the economy code tomorrow.
     
  10. Offline

    thtRedstoneGUI

    Why not release just an iConomy 5 update now and leave Register to the next update?
    This is a great plugin... I need it now lol
     
  11. Offline

    codename_B

    Just release the source so that I can update to iConomy5 now - I can't use some of the plugins I'm writing because I'm forced to use an outdated iConomy...

    @darknesschaos I've resorted to attempting to decompile your code to get it working on iConomy5 on my server.

    WTF is up with SignOperator.java ?!

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: May 8, 2016
  12. Offline

    darknesschaos

    Ask a more specific question and I can answer, That was the only bit of code I could not clean up nicer.

    @codename_B - here you go. https://github.com/darknesschaos/SignTrader I will attempt to allocate time tomorrow to fix. Still going through orientation at the new job.
     
  13. Offline

    codename_B

    It may just have decompiled wrong.
    Code:
    package com.polycrypt.bukkit.plugin.darknesschaos.SignTrader;
    
    import com.polycrypt.bukkit.tools.darknesschaos.ChestProtectionHandler;
    import com.polycrypt.bukkit.tools.darknesschaos.EconomyHandler;
    import java.io.PrintStream;
    import java.util.HashMap;
    import java.util.Locale;
    import org.bukkit.ChatColor;
    import org.bukkit.Material;
    import org.bukkit.World;
    import org.bukkit.block.Block;
    import org.bukkit.block.BlockFace;
    import org.bukkit.block.Chest;
    import org.bukkit.block.Sign;
    import org.bukkit.entity.Player;
    
    public class SignOperator
    {
      private static String noProtErr = "There is no chest protection system.";
      private static String notOwnerErr = "The sign owner does not own the chest.";
      private static String noChestErr = "Could not find the chest linked to the sign.";
      private static String oddErr = "Something odd happened.";
      private static String needOwnerErr = "The chest linked needs an owner first.";
      private static String itemTypeErr = "No item of that type exists.";
      private static String formattingErr = "The sign is in an unexpected format.";
    
      public static String getSignType(String str) {
        if ((str.compareToIgnoreCase("global") == 0) ||
          (str.compareToIgnoreCase("[Global]") == 0))
          return "global";
        if (str.length() > 0) {
          return "personal";
        }
        return null;
      }
    
      public static boolean isSign(Block b) {
        if (!(b.getState() instanceof Sign)) {
          return false;
        }
        String location = b.getX() + ":" + b.getY() + ":" + b.getZ() + ":" + b.getWorld().getName();
    
        return SignTrader.signLocs.containsKey(location);
      }
    
      public static boolean isSign(Sign s) {
        String location = s.getX() + ":" + s.getY() + ":" + s.getZ() + ":" + s.getWorld().getName();
    
        return SignTrader.signLocs.containsKey(location);
      }
    
      public static boolean isBlackListed(int type)
      {
        return !SignTrader.itemIdName.containsKey(Integer.valueOf(type));
      }
    
      public static boolean isBlackListed(String type) {
        return !SignTrader.itemNameId.containsKey(type);
      }
    
      public static int[] getTransFormat(String str)
      {
        int[] retInt = new int[3];
        retInt[0] = 0;
        retInt[1] = 0;
        retInt[2] = 0;
    
        if (str.startsWith("Free")) {
          return retInt;
        }
    
        String[] s = str.split(":");
        if (s.length == 2) {
          if (str.endsWith("$")) {
            if (!EconomyHandler.currencyEnabled) {
              retInt[0] = -2;
              return retInt;
            }
            try {
              retInt[0] = Integer.parseInt(s[0]);
              retInt[1] = -1;
              return retInt;
            }
            catch (Exception e) {
              return null;
            }
          }
          try
          {
            retInt[0] = Integer.parseInt(s[0]);
            retInt[1] = Integer.parseInt(s[1]);
            if (Material.getMaterial(retInt[1]) == null) {
              retInt[0] = -3;
            }
            return retInt;
          }
          catch (Exception e) {
            return null;
          }
    
        }
    
        if (s.length == 3) {
          try {
            retInt[0] = Integer.parseInt(s[0]);
            retInt[1] = Integer.parseInt(s[1]);
            retInt[2] = Integer.parseInt(s[2]);
            if (Material.getMaterial(retInt[1]) == null) {
              retInt[0] = -3;
            }
            return retInt;
          }
          catch (Exception e) {
            return null;
          }
        }
    
        return null;
      }
    
      public static void displaySignInfo(Sign s, Player p) {
        String signType = getSignType(s.getLine(0));
        if (signType == null) {
          return;
        }
        int[] lOneData = getTransFormat(s.getLine(1));
        int[] lTwoData = getTransFormat(s.getLine(2));
        if ((lOneData == null) || (lTwoData == null)) {
          return;
        }
        String location = s.getX() + ":" + s.getY() + ":" + s.getZ() + ":" + s.getWorld().getName();
        String separator = "-----------------------------------";
    
        p.sendMessage(separator);
        if (!SignTrader.signLocs.containsKey(location)) {
          p.sendMessage(ChatColor.YELLOW + "The sign has not been activated.");
          p.sendMessage(ChatColor.YELLOW + "Activate by replacing the sign.");
        }
    
        if (signType.compareToIgnoreCase("global") == 0)
          p.sendMessage("This is a global sign.");
        else if (signType.compareToIgnoreCase("personal") == 0) {
          if (getChest(location, s) == null) {
            p.sendMessage(ChatColor.AQUA + "There is no chest linked with this sign.");
            p.sendMessage("This is a personal sign owned by " + ChatColor.RED + (String)SignTrader.signLocs.get(location) + ChatColor.WHITE + ".");
          }
          else {
            p.sendMessage("This is a personal sign owned by " + ChatColor.RED + (String)SignTrader.signLocs.get(location) + ChatColor.WHITE + ".");
          }
        }
        if ((lOneData[0] == -2) || (lTwoData[0] == 2)) {
          p.sendMessage("There is no Economy System.");
          p.sendMessage(separator);
          return;
        }
        if (lOneData[0] == -3)
          p.sendMessage("The first line has an innapropriate item type.");
        if (lTwoData[0] == -3)
          p.sendMessage("The second line has an innapropriate item type.");
        if ((lOneData[0] == -3) || (lTwoData[0] == -3)) {
          p.sendMessage(separator);
          return;
        }
    
        int getAmount = lOneData[0];
        int giveAmount = lTwoData[0];
        int getType = lOneData[1];
        int giveType = lTwoData[1];
        int getDamage = lOneData[2];
        int giveDamage = lTwoData[2];
    
        String getTypeText = "";
        if (getType == 35) {
          getTypeText = woolText(getDamage);
        } else if (getType == -1) {
          getTypeText = EconomyHandler.getCurrencyName();
        }
        else {
          getTypeText = Material.getMaterial(getType).toString().toLowerCase(Locale.ENGLISH);
          if (getDamage != 0) {
            getTypeText = getTypeText + ", with " + getDamage + " damage,";
          }
        }
        String giveTypeText = "";
        if (giveType == 35) {
          giveTypeText = woolText(giveDamage);
        } else if (giveType == -1) {
          giveTypeText = EconomyHandler.getCurrencyName();
        }
        else {
          giveTypeText = Material.getMaterial(giveType).toString().toLowerCase(Locale.ENGLISH);
          if (giveDamage != 0) {
            giveTypeText = giveTypeText + ", with " + giveDamage + " damage,";
          }
        }
        if ((lOneData[0] == 0) || (lOneData[1] == 0)) {
          if (lTwoData[1] > 0) {
            p.sendMessage("Using the sign will get you " + ChatColor.RED + giveAmount + ChatColor.WHITE + " of " +
              ChatColor.RED + giveTypeText + ChatColor.WHITE + " for free.");
          }
    
        }
        else if ((getAmount == 0) || (giveAmount == 0)) {
          if (signType.compareToIgnoreCase("global") == 0)
            p.sendMessage("This sign can't take donations.");
          else {
            p.sendMessage("This sign is taking donations of " + ChatColor.RED + getAmount + ChatColor.WHITE + " of " +
              ChatColor.RED + getTypeText + ChatColor.WHITE + ".");
          }
        }
        else if (lOneData[1] == -1) {
          if (lTwoData[1] > 0) {
            p.sendMessage("Using the sign will get you " + ChatColor.RED + giveAmount + ChatColor.WHITE + " of " +
              ChatColor.RED + giveTypeText + ChatColor.WHITE + " at the cost of " + ChatColor.RED + getAmount + " " + ChatColor.WHITE + getTypeText + ".");
          }
        }
        else if (lTwoData[1] == -1) {
          p.sendMessage("Using the sign will get you " + ChatColor.RED + giveAmount +
            " " + ChatColor.WHITE + giveTypeText + " at the cost of " + ChatColor.RED + getAmount +
            " " + getTypeText + ChatColor.WHITE + "(s).");
        }
        else
        {
          p.sendMessage("This sign is trading " + ChatColor.RED + giveAmount + ChatColor.WHITE + " of " +
            ChatColor.RED + giveTypeText + ChatColor.WHITE + ", for " +
            ChatColor.RED + getAmount + " " + getTypeText + ChatColor.WHITE + "(s).");
        }
        p.sendMessage(separator);
      }
    
      private static String woolText(int damage) {
        if (damage == 0)
          return "White Wool";
        if (damage == 1)
          return "Orange Wool";
        if (damage == 2)
          return "Magenta Wool";
        if (damage == 3)
          return "Light Blue Wool";
        if (damage == 4)
          return "Yellow Wool";
        if (damage == 5)
          return "Lime Green Wool";
        if (damage == 6)
          return "Pink Wool";
        if (damage == 7)
          return "Gray Wool";
        if (damage == 8)
          return "Light Gray Wool";
        if (damage == 9)
          return "Cyan Wool";
        if (damage == 10)
          return "Purple Wool";
        if (damage == 11)
          return "Blue Wool";
        if (damage == 12)
          return "Brown Wool";
        if (damage == 13)
          return "Green Wool";
        if (damage == 14)
          return "Red Wool";
        if (damage == 15) {
          return "Black Wool";
        }
        return null;
      }
    
      public static Chest getChest(String location, Sign s) {
        if (SignTrader.SignChest.containsKey(location)) {
          String[] chestLoc = ((String)SignTrader.SignChest.get(location)).split(":");
          try {
            int x = Integer.parseInt(chestLoc[0]);
            int y = Integer.parseInt(chestLoc[1]);
            int z = Integer.parseInt(chestLoc[2]);
    
            Block c = s.getWorld().getBlockAt(x, y, z);
            if (!(c.getState() instanceof Chest)) break label141; return (Chest)c.getState();
          }
          catch (Exception e)
          {
            System.out.println("[SignTrader] Sign locations have been inapropriately stored.");
          }
        }
        else {
          Block c = s.getBlock().getRelative(BlockFace.DOWN);
          if ((c.getState() instanceof Chest))
            return (Chest)c.getState();
        }
        label141: return null;
      }
    
      public static int findChest(String location, Sign s, String pName)
      {
        if (SignTrader.SignChest.containsKey(location)) {
          String[] chestLoc = ((String)SignTrader.SignChest.get(location)).split(":");
          try {
            int x = Integer.parseInt(chestLoc[0]);
            int y = Integer.parseInt(chestLoc[1]);
            int z = Integer.parseInt(chestLoc[2]);
    
            Block c = s.getWorld().getBlockAt(x, y, z);
            if ((c.getState() instanceof Chest)) {
              String getOwner = ChestProtectionHandler.getChestOwner(c);
              if (getOwner.compareToIgnoreCase("-noprotection") == 0) {
                return 0;
              }
              if (getOwner.compareToIgnoreCase("-NoOwner") == 0) {
                return -4;
              }
              if (getOwner.compareToIgnoreCase(pName) == 0) {
                return 1;
              }
    
              return -1;
            }
    
            SignTrader.SignChest.remove(location);
            return -2;
          }
          catch (Exception e)
          {
            return -3;
          }
        }
    
        Block c = s.getBlock().getRelative(BlockFace.DOWN);
        if ((c.getState() instanceof Chest)) {
          String getOwner = ChestProtectionHandler.getChestOwner(c);
          if (getOwner.compareToIgnoreCase("-noprotection") == 0) {
            return 0;
          }
          if (getOwner.compareToIgnoreCase("-NoOwner") == 0) {
            return -4;
          }
          if (getOwner.compareToIgnoreCase(pName) == 0) {
            return 1;
          }
    
          return -1;
        }
    
        return -5;
      }
    
      public static String sendChestErr(int errorNum)
      {
        if (errorNum == 0) {
          return noProtErr;
        }
        if (errorNum == -1) {
          return notOwnerErr;
        }
        if (errorNum == -2) {
          return noChestErr;
        }
        if (errorNum == -3) {
          return oddErr;
        }
        if (errorNum == -4) {
          return needOwnerErr;
        }
        if (errorNum == -5) {
          return noChestErr;
        }
        return "Could not find error code.";
      }
    
      public static String sendTransFormatErr(int errorNum)
      {
        if (errorNum == -2) {
          return "There is no money system.";
        }
        if (errorNum == -3) {
          return itemTypeErr;
        }
        if (errorNum == -4) {
          return formattingErr;
        }
        return "Could not find error code.";
      }
    
      public static boolean isSignOwner(Sign s, String str)
      {
        String location = s.getX() + ":" + s.getY() + ":" + s.getZ() + ":" + s.getWorld().getName();
    
        return (SignTrader.signLocs.containsKey(location)) &&
          (((String)SignTrader.signLocs.get(location)).compareToIgnoreCase(str) == 0);
      }
    
      public static boolean canBreakSign(Sign s, Player p)
      {
        if (!isSign(s)) {
          return false;
        }
        boolean bool = false;
        bool = isSignOwner(s, p.getName());
        if (!bool) {
          bool = p.isOp();
        }
        return bool;
      }
    
      public static Sign[] getAttachedSigns(Block b) {
        Sign[] signs = new Sign[5];
    
        Block check = b.getRelative(BlockFace.UP);
        if (((check instanceof Sign)) &&
          (check.getType() == Material.SIGN_POST)) {
          signs[0] = ((Sign)check);
        }
        check = b.getRelative(BlockFace.NORTH);
        if (((check instanceof Sign)) &&
          (check.getType() == Material.WALL_SIGN) &&
          (check.getData() == 4)) {
          signs[1] = ((Sign)check);
        }
        check = b.getRelative(BlockFace.EAST);
        if (((check instanceof Sign)) &&
          (check.getType() == Material.WALL_SIGN) &&
          (check.getData() == 2)) {
          signs[2] = ((Sign)check);
        }
        check = b.getRelative(BlockFace.SOUTH);
        if (((check instanceof Sign)) &&
          (check.getType() == Material.WALL_SIGN) &&
          (check.getData() == 5)) {
          signs[3] = ((Sign)check);
        }
        check = b.getRelative(BlockFace.WEST);
        if (((check instanceof Sign)) &&
          (check.getType() == Material.WALL_SIGN) &&
          (check.getData() == 3)) {
          signs[4] = ((Sign)check);
        }
        return signs;
      }
    }
    
    Why not make this much easier for me and share the source? I've removed this plugin from my server and written my own temporary solution to the economy till this plugin is updated - I spent about 5 hours trying to make sense of your decompiled code but it doesn't look to have decompiled correctly.

    Here is the link to the release thread of my temporary solution if anyone wants an economy plugin to tide them over while they wait for this but doesn't want to muck about with config files etc. I've kept it as simple as possible.
    http://forums.bukkit.org/threads/eco-simpleshop-v0-4-economy-made-simple-iconomy-803.18362

    @darknesschaos there are so many people just hanging on, waiting for like 5 simple code changes on your part to change this to iConomy v5. DO ITTTT!
     
    thtRedstoneGUI likes this.
  14. Offline

    thtRedstoneGUI

    Totally agree!
     
  15. Offline

    codename_B

    darknesschaos likes this.
  16. Offline

    Dev

  17. Offline

    thtRedstoneGUI

  18. Offline

    belk

    Confirmed not-working in Bukkit 766 / iConomy 5.

    Pretty sure it's not working with iConomy 5 yet.

    Edit: Let me clarify. The signs work. The economy hookup does not, so the signs won't modify your iConomy balances.
     
  19. Offline

    codename_B

    Update to 803 then? It works on my 803, updating balance/signs working etc
     
  20. Offline

    belk

    Just updated to 803. Still have the same issue with iConomy 5.

    Looks like an issue with EconomyHandler.modifyMoney() on line 45. Darknesschaos's original code line 45 is a conditional to handle if the amount is less than 0, but I'm guessing you've made changes since none of my values were less than zero.

    My Tests:
    Show Spoiler
    Code:
    Global
    1:3
    1:$
    Takes 1 dirt. Gives 1 currency.
    Result: Takes 1 dirt and Exception
    Code:
    Global
    1:$
    1:3
    Takes 1 currency. Gives 1 dirt.
    With enough money: Exception
    Without enough money: "You or they do not have enough funds for that"
    Here's the exception:
    Code:
    11:16:25 [SEVERE] Could not pass event PLAYER_INTERACT to SignTrader
    java.lang.NoSuchMethodError: com.nijikokun.register.payment.Method$MethodAccount.set(D)Z
            at com.polycrypt.bukkit.tools.darknesschaos.EconomyHandler.modifyMoney(EconomyHandler.java:45)
            at com.polycrypt.bukkit.plugin.darknesschaos.SignTrader.SignManager.sellItem(SignManager.java:249)
            at com.polycrypt.bukkit.plugin.darknesschaos.SignTrader.SignManager.useSign(SignManager.java:159)
            at com.polycrypt.bukkit.plugin.darknesschaos.SignTrader.SignTraderPlayerListener.onPlayerInteract(SignTraderPlayerListener.java:42)
            at org.bukkit.plugin.java.JavaPluginLoader$9.execute(JavaPluginLoader.java:299)
            at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:58)
            at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:310)
            at org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:162)
            at net.minecraft.server.ItemInWorldManager.interact(ItemInWorldManager.java:207)
            at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:535)
            at net.minecraft.server.Packet15Place.a(SourceFile:57)
            at net.minecraft.server.NetworkManager.a(NetworkManager.java:196)
            at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:75)
            at net.minecraft.server.NetworkListenThread.a(SourceFile:100)
            at net.minecraft.server.MinecraftServer.h(MinecraftServer.java:377)
            at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:292)
            at net.minecraft.server.ThreadServerApplication.run(SourceFile:394)
    
    Edit: Cracked open the .jar and it turns out line 45 is the line that performs the account balance change if the amount is negative (if codename_B packaged the right .java files). Really weird since I wasn't using any negative values.

    What's up with this method darknesschaos?
    if(amount > -1) //add amount to current balance
    else //subtract amount from current balance
    This is always going to be an addition to the account.
     
  21. Offline

    Dev

    I'm not going through all the trouble to update my plugins for 803, when MC 1.6 is right around the corner. Provided all of my plugins are even compatible with 803...
     
  22. Offline

    darknesschaos

    There was a method to my madness, but then I started working full time. I SHOULD have some time to work on this tomorrow, sorry about being soooo slow :(
     
  23. Offline

    codename_B

    :S lol, I'm not convinced.

    Can I have the source of the old version? Not the source of the new one...
     
  24. Offline

    Garloth

    When will be the 818 wersion?
     
  25. Offline

    Dev

    I'm gonna guess this plugin has officially died. Which is a real shame because it really was the best shop plugin available. I'm going to have to abandon it in exchange for something that is more regularly updated. I can't have this plugin holding our server back all the time.
     
  26. Offline

    darknesschaos

    sorry everyone, its just a pain to keep up with everything. I dont have the time to keep this updated. If anyone wants to adopt this project, I will help as much as possible. I may try to get an update out soon, but dont hold your breath.
     
  27. Offline

    Garloth

    Please somebody!
    Update it!
    It's the best shop plugin EVER!!!
     
  28. Offline

    Panicman23

    ok i have iconomy and signtrader allready but when i set up a sign it says "There is no money system" can you please help me with this problem?
     
  29. Offline

    Garloth

    It is 200 wersions outdated and it won't work till somebody updates it.
    EDIT: 250 now.
     
  30. Offline

    ntwitch

    Garloth likes this.
  31. Offline

    Garloth

    Anone tested?
     

Share This Page