Thread: Issue with adding a new toolbelt.

Page 1 of 2 12 LastLast
Results 1 to 10 of 13
  1. #1 Issue with adding a new toolbelt. 
    Registered Member
    Join Date
    Mar 2020
    Posts
    23
    Thanks given
    3
    Thanks received
    2
    Rep Power
    11
    Hello. I'm having an issue with the toolbelt. I've updated our toolbelt.java to include more items and adding support for a command to remove toolbelt items. However, when I try and log in it says error loading profile and gives me this error.

    Code:
    [SerializableFilesManager] Recovering account: sofakingh4rd
    ERROR! THREAD NAME: New I/O server worker #1-1
    java.io.InvalidClassException: com.rs.game.player.Toolbelt; local class incompatible: stream classdesc serialVersionUID = 8785635409322322662, local class serialVersionUID = -7244573478285647954
            at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:699)
            at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:2001)
            at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1848)
            at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2158)
            at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1665)
            at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2403)
            at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2327)
            at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2185)
            at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1665)
            at java.io.ObjectInputStream.readObject(ObjectInputStream.java:501)
            at java.io.ObjectInputStream.readObject(ObjectInputStream.java:459)
            at com.rs.utils.SerializableFilesManager.loadSerializedFile(SerializableFilesManager.java:168)
            at com.rs.utils.SerializableFilesManager.loadPlayer(SerializableFilesManager.java:136)
            at com.rs.net.decoders.LoginPacketsDecoder.decodeWorldLogin(LoginPacketsDecoder.java:179)
            at com.rs.net.decoders.LoginPacketsDecoder.decode(LoginPacketsDecoder.java:43)
            at com.rs.net.ServerChannelHandler.messageReceived(ServerChannelHandler.java:136)
            at org.jboss.netty.channel.SimpleChannelHandler.handleUpstream(SimpleChannelHandler.java:100)
            at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
            at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:559)
            at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:274)
            at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:261)
            at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:351)
            at org.jboss.netty.channel.socket.nio.NioWorker.processSelectedKeys(NioWorker.java:282)
            at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:202)
            at org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108)
            at org.jboss.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:44)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
            at java.lang.Thread.run(Thread.java:748)


    Something to do with the class files? I've tried removing them to no avail. While creating a new account it works fine, just not on existing accounts. I really don't want to delete all player profiles to make this work! Any help in fixing this would be amazing.

    The command I added is below. It removes all items from the toolbelt, which I thought was the issue, but sadly it looks like something to do with the player profiles ;(

    owner.java
    Code:
    if (cmd[0].equalsIgnoreCase("resetbelt")) {
                    String username = cmd[1].substring(cmd[1].indexOf(" ") + 1);
                    Player other = World.getPlayerByDisplayName(username);
                    if (other == null) {
                        return true;
                    }
                    other.getToolbelt().reset();
                    player.getPackets().sendGameMessage("You have reset" + other.getDisplayName() + "Toolbelt.");
                    other.getPackets().sendGameMessage("Your Toolbelt has been reset by" + player.getDisplayName() + ".");
                    return true;
                }

    toolbelt.java
    Code:
    public void reset() {
    		toolbeltItems.clear();
    		toolbeltItems = new HashMap<Integer, Boolean>();
    		for (int items : TOOLBELT_ITEMS)
    			toolbeltItems.put(items, false);
    //		player.sm("Toolbelt items reset.");


    Thank you so much!

    EDIT

    Before anyone asks, yes I have added this.

    Code:
    public class Toolbelt implements Serializable {
    Reply With Quote  
     

  2. #2  
    Contributor

    clem585's Avatar
    Join Date
    Sep 2013
    Posts
    3,788
    Thanks given
    706
    Thanks received
    702
    Rep Power
    570
    What are the exact changes you made to Toolbelt? Here are the compatible/incompatible changes for Java serializables: https://docs.oracle.com/javase/1.5.0...sion.html#6678

    Did you do any of this?

    Code:
    - Changing the declared type of a primitive field (ex: int, String, byte, etc...)
    - Deleting fields
    Project thread
    Reply With Quote  
     

  3. #3  
    Registered Member
    Join Date
    Mar 2020
    Posts
    23
    Thanks given
    3
    Thanks received
    2
    Rep Power
    11
    Quote Originally Posted by clem585 View Post
    What are the exact changes you made to Toolbelt? Here are the compatible/incompatible changes for Java serializables: https://docs.oracle.com/javase/1.5.0...sion.html#6678

    Did you do any of this?

    Code:
    - Changing the declared type of a primitive field (ex: int, String, byte, etc...)
    - Deleting fields

    Thank you for the reply. I'll have a look at that for sure. I have posted the toolbelt.java old and new below for you to take a look at if possible. I've also tried changing the UID's, 8785635409322322662, local class serialVersionUID = -7244573478285647954
    That did not work either.

    Toolbelt.java(OLD)

    Code:
    package com.rs.game.player;
    
    import java.io.Serializable;
    import java.util.HashMap;
    import java.util.Map;
    
    import com.rs.game.item.Item;
    
    public class Toolbelt implements Serializable {
    
    	/** The Constant serialVersionUID. */
    	private static final long serialVersionUID = 8785635409322322662L;
    
    	/** The player. */
    	private transient Player player;
    
    	/** The Constant TOOLBELT_ITEMS. */
    	private static final int[] TOOLBELT_ITEMS = new int[] { 946, 1735, 1595, 1755, 1599, 1597, 1733, 1592, 5523, 13431,
    			307, 309, 311, 301, 303, 1265, 2347, 1351, 590, -1, 8794, 4, 9434, 11065, 1785, 2976, 1594, 5343, 5325,
    			5341, 5329, 233, 952, 305, 975, 11323, 2575, 2576, 13153, 10150 };
    
    	/** The Constant Config_IDS. */
    	private static final int[] Config_IDS = new int[] { 2438, 2439 };
    
    	/** The toolbelt items. */
    	public Map<Integer, Boolean> toolbeltItems;
    
    	/**
    	 * Instantiates a new toolbelt.
    	 */
    	public Toolbelt() {
    		if (toolbeltItems == null)
    			toolbeltItems = new HashMap<Integer, Boolean>();
    		for (int items : TOOLBELT_ITEMS)
    			toolbeltItems.put(items, false);
    
    	}
    
    	/**
    	 * Sets the player.
    	 *
    	 * @Param player the new player
    	 */
    	public void setPlayer(Player player) {
    		this.player = player;
    	}
    
    	public void init() {
    		refreshItems();
    	}
    
    	public void reset() {                     //Added this just as a test to see if it would work.
    		toolbeltItems.clear();
    		toolbeltItems = new HashMap<Integer, Boolean>();
    		for (int items : TOOLBELT_ITEMS)
    			toolbeltItems.put(items, false);
    //		player.sm("Toolbelt items reset.");
    	}
    
    	/**
    	 * Adds the item.
    	 *
    	 * @Param item the item
    	 * @Return true, if successful
    	 */
    		public boolean addItem(int itemId, Item item) {
    		if (toolbeltItems.get(item.getId()) == null) {
    			player.sm("item is null");
    			return false;
    		}
    		if (toolbeltItems.get(item.getId())) {
    			refreshItems();
    			player.sm(item.getName() + " is already in your toolbelt.");
    			return false;
    		}
    		player.getInventory().deleteItem(item);
    		toolbeltItems.put(item.getId(), true);
    		player.sm("The " + item.getName() + " has been added to your toolbelt.");
    		refreshItems();
    		return true;
    	}
    
    	public void printToolbelt() {
    		player.sm("" + toolbeltItems.get(946));
    	}
    
    	/**
    	 * Check storage.
    	 *
    	 * @Param item the item
    	 * @Return true, if successful
    	 */
    	public static boolean checkStorage(int item) {
    		for (int i = 0; i < TOOLBELT_ITEMS.length - 1; i++) {
    			if (item == TOOLBELT_ITEMS[i])
    				return true;
    		}
    		return false;
    	}
    
    	/**
    	 * Check if the item is within the players' toolbelt.
    	 *
    	 * @Param item the item
    	 * @Return true, if successful
    	 */
    	public boolean contains(int item) {
    		if (toolbeltItems.get(item) == null) {
    			return false;
    		}
    		return toolbeltItems.get(item);
    	}
    
    	/**
    	 * Refresh items.
    	 */
    	public void refreshItems() {
    		int[] configValue = new int[Config_IDS.length];
    		for (int i = 0; i < TOOLBELT_ITEMS.length; i++) {
    			if (toolbeltItems.get(TOOLBELT_ITEMS[i]) == null)
    				continue;
    			boolean inToolbelt = toolbeltItems.get(TOOLBELT_ITEMS[i]);
    			if (!inToolbelt)
    				continue;
    			int index = (i / 20);
    			configValue[index] |= 1 << (i - (index * 20));
    		}
    		for (int i = 0; i < Config_IDS.length; i++) {
    			if (configValue[i] == 0)
    				continue;
    			player.getPackets().sendConfig(Config_IDS[i], configValue[i]);
    		}
    	}
    
    	/**
    	 * Open toolbelt.
    	 */
    	public void openToolbelt() {
    		refreshItems();
    		player.getInterfaceManager().sendInterface(1178);
    	}
    
    
    
    }
    Toolbelt.java(NEW, not working)

    Code:
    package com.rs.game.player;
    
    import java.io.Serializable;
    
    import com.rs.game.item.Item;
    
    public class Toolbelt implements Serializable {
    
    	private static final long serialVersionUID = -7244573478285647954L;   // Tried changing, did not work.
    
    	private static final int[] TOOLBET_ITEMS = new int[] { 946, 1735, 1595, 1755, 1599, 1597, 1733, 1592, 5523, 13431,
    			307, 309, 311, 301, 303, 1265, 2347, 1351, 590, -1, 8794, 4, 9434, 11065, 1785, 2976, 1594, 5343, 5325,
    			5341, 5329, 233, 952, 305, 975, 11323, 2575, 2576, 13153, 10150,
    			// end of default items
    			1267, 1269, 1273, 1271, 1275, 15259, // pickaxes - normal
    			20780, 20781, 20782, 20784, 20783, 20785, 20786, // pickaxes - upgraded
    			13661, // inferno adze
    			1349, 1353, 1355, 1357, 1359, 6739 // hatchets
    	};
    	private static final int[] CONFIG_IDS = new int[] { 2438, 2439 };
    	private boolean[] items;
    	private transient Player player;
    	private boolean updated;
    
    	public Toolbelt() {
    		items = new boolean[TOOLBET_ITEMS.length];
    	}
    
    	public void setPlayer(Player player) {
    		this.player = player;
    		if (items != null && !updated) {
    			boolean newToolbelt[] = items;
    			items = new boolean[TOOLBET_ITEMS.length];
    			for (int i = 0; i < newToolbelt.length; i++) {
    				items[i] = newToolbelt[i];
    			}
    			updated = true;
    		}
    	}
    
    	public void init() {
    		refreshConfigs();
    	}
    
    	private int getConfigIndex(int i) {
    		return i / 20;
    	}
    
    	private void refreshConfigs() {
    		int[] configValues = new int[CONFIG_IDS.length];
    		for (int i = 0; i < items.length - 20; i++) {
    			if (items[i]) {
    				int index = getConfigIndex(i);
    				configValues[index] |= 1 << i - index * 20;
    			}
    		}
    		for (int i = 0; i < CONFIG_IDS.length; i++) {
    			player.getPackets().sendConfig(CONFIG_IDS[i], configValues[i]);
    		}
    	}
    
    	private int getItemSlot(int id) {
    		for (int i = 0; i < TOOLBET_ITEMS.length; i++) {
    			if (TOOLBET_ITEMS[i] == id) {
    				return i;
    			}
    		}
    		return -1;
    	}
    
    	public boolean addItem(int invSlot, Item item) {
    		int slot = getItemSlot(item.getId());
    		if (slot == -1) {
    			return false;
    		}
    		if (items[slot]) {
    			player.getPackets().sendInventoryMessage(0, invSlot, "That is already on your tool belt.");
    		} else {
    			items[slot] = true;
    			player.getInventory().deleteItem(invSlot, item);
    			refreshConfigs();
    			player.getPackets()
    					.sendGameMessage("You add the " + item.getDefinitions().getName() + " to your tool belt.");
    		}
    		return true;
    	}
    
    	public boolean containsItem(int id) {
    		int slot = getItemSlot(id);
    		return slot == -1 ? false : items[slot];
    	}
    
    }
    Reply With Quote  
     

  4. #4  
    Contributor

    clem585's Avatar
    Join Date
    Sep 2013
    Posts
    3,788
    Thanks given
    706
    Thanks received
    702
    Rep Power
    570
    Quote Originally Posted by sofakingh4rd View Post
    Thank you for the reply. I'll have a look at that for sure. I have posted the toolbelt.java old and new below for you to take a look at if possible. I've also tried changing the UID's, 8785635409322322662, local class serialVersionUID = -7244573478285647954
    That did not work either.

    Toolbelt.java(OLD)

    Code:
    package com.rs.game.player;
    
    import java.io.Serializable;
    import java.util.HashMap;
    import java.util.Map;
    
    import com.rs.game.item.Item;
    
    public class Toolbelt implements Serializable {
    
    	/** The Constant serialVersionUID. */
    	private static final long serialVersionUID = 8785635409322322662L;
    
    	/** The player. */
    	private transient Player player;
    
    	/** The Constant TOOLBELT_ITEMS. */
    	private static final int[] TOOLBELT_ITEMS = new int[] { 946, 1735, 1595, 1755, 1599, 1597, 1733, 1592, 5523, 13431,
    			307, 309, 311, 301, 303, 1265, 2347, 1351, 590, -1, 8794, 4, 9434, 11065, 1785, 2976, 1594, 5343, 5325,
    			5341, 5329, 233, 952, 305, 975, 11323, 2575, 2576, 13153, 10150 };
    
    	/** The Constant Config_IDS. */
    	private static final int[] Config_IDS = new int[] { 2438, 2439 };
    
    	/** The toolbelt items. */
    	public Map<Integer, Boolean> toolbeltItems;
    
    	/**
    	 * Instantiates a new toolbelt.
    	 */
    	public Toolbelt() {
    		if (toolbeltItems == null)
    			toolbeltItems = new HashMap<Integer, Boolean>();
    		for (int items : TOOLBELT_ITEMS)
    			toolbeltItems.put(items, false);
    
    	}
    
    	/**
    	 * Sets the player.
    	 *
    	 * @Param player the new player
    	 */
    	public void setPlayer(Player player) {
    		this.player = player;
    	}
    
    	public void init() {
    		refreshItems();
    	}
    
    	public void reset() {                     //Added this just as a test to see if it would work.
    		toolbeltItems.clear();
    		toolbeltItems = new HashMap<Integer, Boolean>();
    		for (int items : TOOLBELT_ITEMS)
    			toolbeltItems.put(items, false);
    //		player.sm("Toolbelt items reset.");
    	}
    
    	/**
    	 * Adds the item.
    	 *
    	 * @Param item the item
    	 * @Return true, if successful
    	 */
    		public boolean addItem(int itemId, Item item) {
    		if (toolbeltItems.get(item.getId()) == null) {
    			player.sm("item is null");
    			return false;
    		}
    		if (toolbeltItems.get(item.getId())) {
    			refreshItems();
    			player.sm(item.getName() + " is already in your toolbelt.");
    			return false;
    		}
    		player.getInventory().deleteItem(item);
    		toolbeltItems.put(item.getId(), true);
    		player.sm("The " + item.getName() + " has been added to your toolbelt.");
    		refreshItems();
    		return true;
    	}
    
    	public void printToolbelt() {
    		player.sm("" + toolbeltItems.get(946));
    	}
    
    	/**
    	 * Check storage.
    	 *
    	 * @Param item the item
    	 * @Return true, if successful
    	 */
    	public static boolean checkStorage(int item) {
    		for (int i = 0; i < TOOLBELT_ITEMS.length - 1; i++) {
    			if (item == TOOLBELT_ITEMS[i])
    				return true;
    		}
    		return false;
    	}
    
    	/**
    	 * Check if the item is within the players' toolbelt.
    	 *
    	 * @Param item the item
    	 * @Return true, if successful
    	 */
    	public boolean contains(int item) {
    		if (toolbeltItems.get(item) == null) {
    			return false;
    		}
    		return toolbeltItems.get(item);
    	}
    
    	/**
    	 * Refresh items.
    	 */
    	public void refreshItems() {
    		int[] configValue = new int[Config_IDS.length];
    		for (int i = 0; i < TOOLBELT_ITEMS.length; i++) {
    			if (toolbeltItems.get(TOOLBELT_ITEMS[i]) == null)
    				continue;
    			boolean inToolbelt = toolbeltItems.get(TOOLBELT_ITEMS[i]);
    			if (!inToolbelt)
    				continue;
    			int index = (i / 20);
    			configValue[index] |= 1 << (i - (index * 20));
    		}
    		for (int i = 0; i < Config_IDS.length; i++) {
    			if (configValue[i] == 0)
    				continue;
    			player.getPackets().sendConfig(Config_IDS[i], configValue[i]);
    		}
    	}
    
    	/**
    	 * Open toolbelt.
    	 */
    	public void openToolbelt() {
    		refreshItems();
    		player.getInterfaceManager().sendInterface(1178);
    	}
    
    
    
    }
    Toolbelt.java(NEW, not working)

    Code:
    package com.rs.game.player;
    
    import java.io.Serializable;
    
    import com.rs.game.item.Item;
    
    public class Toolbelt implements Serializable {
    
    	private static final long serialVersionUID = -7244573478285647954L;   // Tried changing, did not work.
    
    	private static final int[] TOOLBET_ITEMS = new int[] { 946, 1735, 1595, 1755, 1599, 1597, 1733, 1592, 5523, 13431,
    			307, 309, 311, 301, 303, 1265, 2347, 1351, 590, -1, 8794, 4, 9434, 11065, 1785, 2976, 1594, 5343, 5325,
    			5341, 5329, 233, 952, 305, 975, 11323, 2575, 2576, 13153, 10150,
    			// end of default items
    			1267, 1269, 1273, 1271, 1275, 15259, // pickaxes - normal
    			20780, 20781, 20782, 20784, 20783, 20785, 20786, // pickaxes - upgraded
    			13661, // inferno adze
    			1349, 1353, 1355, 1357, 1359, 6739 // hatchets
    	};
    	private static final int[] CONFIG_IDS = new int[] { 2438, 2439 };
    	private boolean[] items;
    	private transient Player player;
    	private boolean updated;
    
    	public Toolbelt() {
    		items = new boolean[TOOLBET_ITEMS.length];
    	}
    
    	public void setPlayer(Player player) {
    		this.player = player;
    		if (items != null && !updated) {
    			boolean newToolbelt[] = items;
    			items = new boolean[TOOLBET_ITEMS.length];
    			for (int i = 0; i < newToolbelt.length; i++) {
    				items[i] = newToolbelt[i];
    			}
    			updated = true;
    		}
    	}
    
    	public void init() {
    		refreshConfigs();
    	}
    
    	private int getConfigIndex(int i) {
    		return i / 20;
    	}
    
    	private void refreshConfigs() {
    		int[] configValues = new int[CONFIG_IDS.length];
    		for (int i = 0; i < items.length - 20; i++) {
    			if (items[i]) {
    				int index = getConfigIndex(i);
    				configValues[index] |= 1 << i - index * 20;
    			}
    		}
    		for (int i = 0; i < CONFIG_IDS.length; i++) {
    			player.getPackets().sendConfig(CONFIG_IDS[i], configValues[i]);
    		}
    	}
    
    	private int getItemSlot(int id) {
    		for (int i = 0; i < TOOLBET_ITEMS.length; i++) {
    			if (TOOLBET_ITEMS[i] == id) {
    				return i;
    			}
    		}
    		return -1;
    	}
    
    	public boolean addItem(int invSlot, Item item) {
    		int slot = getItemSlot(item.getId());
    		if (slot == -1) {
    			return false;
    		}
    		if (items[slot]) {
    			player.getPackets().sendInventoryMessage(0, invSlot, "That is already on your tool belt.");
    		} else {
    			items[slot] = true;
    			player.getInventory().deleteItem(invSlot, item);
    			refreshConfigs();
    			player.getPackets()
    					.sendGameMessage("You add the " + item.getDefinitions().getName() + " to your tool belt.");
    		}
    		return true;
    	}
    
    	public boolean containsItem(int id) {
    		int slot = getItemSlot(id);
    		return slot == -1 ? false : items[slot];
    	}
    
    }
    You can't delete fields. Try adding this back:

    Code:
    	/** The toolbelt items. */
    	public Map<Integer, Boolean> toolbeltItems;
    You don't have to use it, but you need it to be there.
    Project thread
    Reply With Quote  
     

  5. #5  
    Registered Member
    Join Date
    Mar 2020
    Posts
    23
    Thanks given
    3
    Thanks received
    2
    Rep Power
    11
    Quote Originally Posted by clem585 View Post
    You can't delete fields. Try adding this back:

    Code:
    	/** The toolbelt items. */
    	public Map<Integer, Boolean> toolbeltItems;
    You don't have to use it, but you need it to be there.

    I didn't notice that! Sadly this still hasn't solved the issue.
    Reply With Quote  
     

  6. #6  
    Contributor

    clem585's Avatar
    Join Date
    Sep 2013
    Posts
    3,788
    Thanks given
    706
    Thanks received
    702
    Rep Power
    570
    Quote Originally Posted by sofakingh4rd View Post
    I didn't notice that! Sadly this still hasn't solved the issue.
    Huh not entirely sure. Maybe try changing your version UID to match the previous one?
    Project thread
    Reply With Quote  
     

  7. #7  
    Registered Member
    Join Date
    Mar 2020
    Posts
    23
    Thanks given
    3
    Thanks received
    2
    Rep Power
    11
    Quote Originally Posted by clem585 View Post
    Huh not entirely sure. Maybe try changing your version UID to match the previous one?

    I honestly thought I did that lol! That worked to an extent. I can now log in, but everything is nulled, and can't interact with the game. A new error this time to do with refreshing configs?

    Code:
    java.lang.NullPointerException
            at com.rs.game.player.Toolbelt.refreshConfigs(Toolbelt.java:51)
            at com.rs.game.player.Toolbelt.init(Toolbelt.java:42)
            at com.rs.game.player.Player.initiate(Player.java:1408)
            at com.rs.game.player.Player.run(Player.java:1451)
            at com.rs.game.player.Player.start(Player.java:1641)
            at com.rs.net.decoders.LoginPacketsDecoder.decodeWorldLogin(LoginPacketsDecoder.java:220)
            at com.rs.net.decoders.LoginPacketsDecoder.decode(LoginPacketsDecoder.java:43)
            at com.rs.net.ServerChannelHandler.messageReceived(ServerChannelHandler.java:136)
            at org.jboss.netty.channel.SimpleChannelHandler.handleUpstream(SimpleChannelHandler.java:100)
            at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
            at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:559)
            at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:274)
            at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:261)
            at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:351)
            at org.jboss.netty.channel.socket.nio.NioWorker.processSelectedKeys(NioWorker.java:282)
            at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:202)
            at org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108)
            at org.jboss.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:44)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
            at java.lang.Thread.run(Thread.java:748)

    Toolbelt 51 -
    Code:
    for (int i = 0; i < items.length - 20; i++) {

    Toolbelt 42 -
    Code:
    refreshConfigs();
    Full code
    Code:
    public void init() {
    		refreshConfigs();
    	}
    
    	private int getConfigIndex(int i) {
    		return i / 20;
    	}
    
    	private void refreshConfigs() {
    		int[] configValues = new int[CONFIG_IDS.length];
    		for (int i = 0; i < items.length - 20; i++) {
    			if (items[i]) {
    				int index = getConfigIndex(i);
    				configValues[index] |= 1 << i - index * 20;
    			}
    		}
    		for (int i = 0; i < CONFIG_IDS.length; i++) {
    			player.getPackets().sendConfig(CONFIG_IDS[i], configValues[i]);
    		}
    	}

    EDIT. When trying to add to the belt I also get this error.

    Code:
    java.lang.NullPointerException
            at com.rs.game.player.Toolbelt.addItem(Toolbelt.java:76)
            at com.rs.net.decoders.handlers.InventoryOptionsHandler.handleItemOption6(InventoryOptionsHandler.java:3415)
            at com.rs.net.decoders.handlers.ButtonHandler.handleButtons(ButtonHandler.java:2305)
            at com.rs.net.decoders.WorldPacketsDecoder.processPackets(WorldPacketsDecoder.java:1381)
            at com.rs.net.decoders.WorldPacketsDecoder.decode(WorldPacketsDecoder.java:293)
            at com.rs.net.ServerChannelHandler.messageReceived(ServerChannelHandler.java:136)
            at org.jboss.netty.channel.SimpleChannelHandler.handleUpstream(SimpleChannelHandler.java:100)
            at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
            at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:559)
            at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:274)
            at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:261)
            at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:351)
            at org.jboss.netty.channel.socket.nio.NioWorker.processSelectedKeys(NioWorker.java:282)
            at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:202)
            at org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108)
            at org.jboss.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:44)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
            at java.lang.Thread.run(Thread.java:748)
    Toolbelt - 76
    Code:
    	if (items[slot]) {
    Full code
    Code:
    public boolean addItem(int invSlot, Item item) {
    		int slot = getItemSlot(item.getId());
    		if (slot == -1) {
    			return false;
    		}
    		if (items[slot]) {
    			player.getPackets().sendInventoryMessage(0, invSlot, "That is already on your tool belt.");
    		} else {
    			items[slot] = true;
    			player.getInventory().deleteItem(invSlot, item);
    			refreshConfigs();
    			player.getPackets()
    					.sendGameMessage("You add the " + item.getDefinitions().getName() + " to your tool belt.");
    		}
    		return true;
    	}
    Reply With Quote  
     

  8. #8  
    Contributor

    clem585's Avatar
    Join Date
    Sep 2013
    Posts
    3,788
    Thanks given
    706
    Thanks received
    702
    Rep Power
    570
    Quote Originally Posted by sofakingh4rd View Post
    I honestly thought I did that lol! That worked to an extent. I can now log in, but everything is nulled, and can't interact with the game. A new error this time to do with refreshing configs?

    Code:
    java.lang.NullPointerException
            at com.rs.game.player.Toolbelt.refreshConfigs(Toolbelt.java:51)
            at com.rs.game.player.Toolbelt.init(Toolbelt.java:42)
            at com.rs.game.player.Player.initiate(Player.java:1408)
            at com.rs.game.player.Player.run(Player.java:1451)
            at com.rs.game.player.Player.start(Player.java:1641)
            at com.rs.net.decoders.LoginPacketsDecoder.decodeWorldLogin(LoginPacketsDecoder.java:220)
            at com.rs.net.decoders.LoginPacketsDecoder.decode(LoginPacketsDecoder.java:43)
            at com.rs.net.ServerChannelHandler.messageReceived(ServerChannelHandler.java:136)
            at org.jboss.netty.channel.SimpleChannelHandler.handleUpstream(SimpleChannelHandler.java:100)
            at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
            at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:559)
            at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:274)
            at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:261)
            at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:351)
            at org.jboss.netty.channel.socket.nio.NioWorker.processSelectedKeys(NioWorker.java:282)
            at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:202)
            at org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108)
            at org.jboss.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:44)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
            at java.lang.Thread.run(Thread.java:748)

    Toolbelt 51 -
    Code:
    for (int i = 0; i < items.length - 20; i++) {

    Toolbelt 42 -
    Code:
    refreshConfigs();
    Full code
    Code:
    public void init() {
    		refreshConfigs();
    	}
    
    	private int getConfigIndex(int i) {
    		return i / 20;
    	}
    
    	private void refreshConfigs() {
    		int[] configValues = new int[CONFIG_IDS.length];
    		for (int i = 0; i < items.length - 20; i++) {
    			if (items[i]) {
    				int index = getConfigIndex(i);
    				configValues[index] |= 1 << i - index * 20;
    			}
    		}
    		for (int i = 0; i < CONFIG_IDS.length; i++) {
    			player.getPackets().sendConfig(CONFIG_IDS[i], configValues[i]);
    		}
    	}

    EDIT. When trying to add to the belt I also get this error.

    Code:
    java.lang.NullPointerException
            at com.rs.game.player.Toolbelt.addItem(Toolbelt.java:76)
            at com.rs.net.decoders.handlers.InventoryOptionsHandler.handleItemOption6(InventoryOptionsHandler.java:3415)
            at com.rs.net.decoders.handlers.ButtonHandler.handleButtons(ButtonHandler.java:2305)
            at com.rs.net.decoders.WorldPacketsDecoder.processPackets(WorldPacketsDecoder.java:1381)
            at com.rs.net.decoders.WorldPacketsDecoder.decode(WorldPacketsDecoder.java:293)
            at com.rs.net.ServerChannelHandler.messageReceived(ServerChannelHandler.java:136)
            at org.jboss.netty.channel.SimpleChannelHandler.handleUpstream(SimpleChannelHandler.java:100)
            at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
            at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:559)
            at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:274)
            at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:261)
            at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:351)
            at org.jboss.netty.channel.socket.nio.NioWorker.processSelectedKeys(NioWorker.java:282)
            at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:202)
            at org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108)
            at org.jboss.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:44)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
            at java.lang.Thread.run(Thread.java:748)
    Toolbelt - 76
    Code:
    	if (items[slot]) {
    Full code
    Code:
    public boolean addItem(int invSlot, Item item) {
    		int slot = getItemSlot(item.getId());
    		if (slot == -1) {
    			return false;
    		}
    		if (items[slot]) {
    			player.getPackets().sendInventoryMessage(0, invSlot, "That is already on your tool belt.");
    		} else {
    			items[slot] = true;
    			player.getInventory().deleteItem(invSlot, item);
    			refreshConfigs();
    			player.getPackets()
    					.sendGameMessage("You add the " + item.getDefinitions().getName() + " to your tool belt.");
    		}
    		return true;
    	}
    Your Toolbelt::init seems to be called before your Toolbelt::setPlayer. Try moving this block at the start of your Toolbelt::init before the refresh:

    Code:
    public void setPlayer(Player player) {
    		this.player = player;
    	}
    
    	public void init() {
    		if (items != null && !updated) {
    			boolean newToolbelt[] = items;
    			items = new boolean[TOOLBET_ITEMS.length];
    			for (int i = 0; i < newToolbelt.length; i++) {
    				items[i] = newToolbelt[i];
    			}
    			updated = true;
    		}
    		refreshConfigs();
    	}
    Project thread
    Reply With Quote  
     

  9. #9  
    Registered Member
    Join Date
    Mar 2020
    Posts
    23
    Thanks given
    3
    Thanks received
    2
    Rep Power
    11
    I have no idea what is going on now I tried that, and it did not work. Another error now, I can't figure out what's wrong

    Error:

    Code:
    java.lang.ArrayIndexOutOfBoundsException: 1599
            at com.rs.game.item.ItemsContainer.remove(ItemsContainer.java:292)
            at com.rs.game.player.Inventory.deleteItem(Inventory.java:100)
            at com.rs.game.player.Toolbelt.addItem(Toolbelt.java:85)
            at com.rs.net.decoders.handlers.InventoryOptionsHandler.handleItemOption6(InventoryOptionsHandler.java:3415)
            at com.rs.net.decoders.handlers.ButtonHandler.handleButtons(ButtonHandler.java:2305)
            at com.rs.net.decoders.WorldPacketsDecoder.processPackets(WorldPacketsDecoder.java:1381)
            at com.rs.net.decoders.WorldPacketsDecoder.decode(WorldPacketsDecoder.java:293)
            at com.rs.net.ServerChannelHandler.messageReceived(ServerChannelHandler.java:136)
            at org.jboss.netty.channel.SimpleChannelHandler.handleUpstream(SimpleChannelHandler.java:100)
            at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
            at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:559)
            at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:274)
            at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:261)
            at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:351)
            at org.jboss.netty.channel.socket.nio.NioWorker.processSelectedKeys(NioWorker.java:282)
            at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:202)
            at org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108)
            at org.jboss.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:44)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
            at java.lang.Thread.run(Thread.java:748)
    ItemsContainer.java
    Line 292

    Code:
    if (data[preferredSlot] != null) {
    Full code
    Code:
    public int remove(int preferredSlot, Item item) {
    		int removed = 0, toRemove = item.getAmount();
    		if (data[preferredSlot] != null) {
    			if (data[preferredSlot].getId() == item.getId()) {
    				int amt = data[preferredSlot].getAmount();
    				if (amt > toRemove) {
    					removed += toRemove;
    					amt -= toRemove;
    					toRemove = 0;
    					// data[preferredSlot] = new
    					// Item(data[preferredSlot].getDefinition().getId(), amt);
    					set2(preferredSlot, new Item(data[preferredSlot].getId(), amt));
    					return removed;
    				} else {
    					removed += amt;
    					toRemove -= amt;
    					// data[preferredSlot] = null;
    					set(preferredSlot, null);
    				}
    			}
    		}
    		for (int i = 0; i < data.length; i++) {
    			if (data[i] != null) {
    				if (data[i].getId() == item.getId()) {
    					int amt = data[i].getAmount();
    					if (amt > toRemove) {
    						removed += toRemove;
    						amt -= toRemove;
    						toRemove = 0;
    						// data[i] = new Item(data[i].getDefinition().getId(),
    						// amt);
    						set2(i, new Item(data[i].getId(), amt));
    						return removed;
    					} else {
    						removed += amt;
    						toRemove -= amt;
    						// data[i] = null;
    						set(i, null);
    					}
    				}
    			}
    		}
    		return removed;
    	}
    Inventory.Java
    Line 100

    Code:
    items.remove(slot, item);
    Full code

    Code:
    public void deleteItem(int slot, Item item) {
    		if (!player.getControlerManager().canDeleteInventoryItem(item.getId(), item.getAmount())) {
    			return;
    		}
    		Item[] itemsBefore = items.getItemsCopy();
    		items.remove(slot, item);
    		refreshItems(itemsBefore);
    	}
    
    	public boolean removeItems(Item... list) {
    		for (Item item : list) {
    			if (item == null) {
    				continue;
    			}
    			deleteItem(item);
    		}
    		return true;
    	}
    
    	public void deleteItem(int itemId, int amount) {
    		if (!player.getControlerManager().canDeleteInventoryItem(itemId, amount)) {
    			return;
    		}
    		Item[] itemsBefore = items.getItemsCopy();
    		items.remove(new Item(itemId, amount));
    		refreshItems(itemsBefore);
    	}
    
    	public void deleteItem(Item item) {
    		if (!player.getControlerManager().canDeleteInventoryItem(item.getId(), item.getAmount())) {
    			return;
    		}
    		Item[] itemsBefore = items.getItemsCopy();
    		items.remove(item);
    		refreshItems(itemsBefore);
    	}
    Toolbelt.java
    Line 85
    Code:
    player.getInventory().deleteItem(invSlot, item);
    I tried changing invSlot to slot, to no avail.
    Reply With Quote  
     

  10. #10  
    Contributor

    clem585's Avatar
    Join Date
    Sep 2013
    Posts
    3,788
    Thanks given
    706
    Thanks received
    702
    Rep Power
    570
    Quote Originally Posted by sofakingh4rd View Post
    I have no idea what is going on now I tried that, and it did not work. Another error now, I can't figure out what's wrong

    Error:

    Code:
    java.lang.ArrayIndexOutOfBoundsException: 1599
            at com.rs.game.item.ItemsContainer.remove(ItemsContainer.java:292)
            at com.rs.game.player.Inventory.deleteItem(Inventory.java:100)
            at com.rs.game.player.Toolbelt.addItem(Toolbelt.java:85)
            at com.rs.net.decoders.handlers.InventoryOptionsHandler.handleItemOption6(InventoryOptionsHandler.java:3415)
            at com.rs.net.decoders.handlers.ButtonHandler.handleButtons(ButtonHandler.java:2305)
            at com.rs.net.decoders.WorldPacketsDecoder.processPackets(WorldPacketsDecoder.java:1381)
            at com.rs.net.decoders.WorldPacketsDecoder.decode(WorldPacketsDecoder.java:293)
            at com.rs.net.ServerChannelHandler.messageReceived(ServerChannelHandler.java:136)
            at org.jboss.netty.channel.SimpleChannelHandler.handleUpstream(SimpleChannelHandler.java:100)
            at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
            at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:559)
            at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:274)
            at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:261)
            at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:351)
            at org.jboss.netty.channel.socket.nio.NioWorker.processSelectedKeys(NioWorker.java:282)
            at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:202)
            at org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108)
            at org.jboss.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:44)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
            at java.lang.Thread.run(Thread.java:748)
    ItemsContainer.java
    Line 292

    Code:
    if (data[preferredSlot] != null) {
    Full code
    Code:
    public int remove(int preferredSlot, Item item) {
    		int removed = 0, toRemove = item.getAmount();
    		if (data[preferredSlot] != null) {
    			if (data[preferredSlot].getId() == item.getId()) {
    				int amt = data[preferredSlot].getAmount();
    				if (amt > toRemove) {
    					removed += toRemove;
    					amt -= toRemove;
    					toRemove = 0;
    					// data[preferredSlot] = new
    					// Item(data[preferredSlot].getDefinition().getId(), amt);
    					set2(preferredSlot, new Item(data[preferredSlot].getId(), amt));
    					return removed;
    				} else {
    					removed += amt;
    					toRemove -= amt;
    					// data[preferredSlot] = null;
    					set(preferredSlot, null);
    				}
    			}
    		}
    		for (int i = 0; i < data.length; i++) {
    			if (data[i] != null) {
    				if (data[i].getId() == item.getId()) {
    					int amt = data[i].getAmount();
    					if (amt > toRemove) {
    						removed += toRemove;
    						amt -= toRemove;
    						toRemove = 0;
    						// data[i] = new Item(data[i].getDefinition().getId(),
    						// amt);
    						set2(i, new Item(data[i].getId(), amt));
    						return removed;
    					} else {
    						removed += amt;
    						toRemove -= amt;
    						// data[i] = null;
    						set(i, null);
    					}
    				}
    			}
    		}
    		return removed;
    	}
    Inventory.Java
    Line 100

    Code:
    items.remove(slot, item);
    Full code

    Code:
    public void deleteItem(int slot, Item item) {
    		if (!player.getControlerManager().canDeleteInventoryItem(item.getId(), item.getAmount())) {
    			return;
    		}
    		Item[] itemsBefore = items.getItemsCopy();
    		items.remove(slot, item);
    		refreshItems(itemsBefore);
    	}
    
    	public boolean removeItems(Item... list) {
    		for (Item item : list) {
    			if (item == null) {
    				continue;
    			}
    			deleteItem(item);
    		}
    		return true;
    	}
    
    	public void deleteItem(int itemId, int amount) {
    		if (!player.getControlerManager().canDeleteInventoryItem(itemId, amount)) {
    			return;
    		}
    		Item[] itemsBefore = items.getItemsCopy();
    		items.remove(new Item(itemId, amount));
    		refreshItems(itemsBefore);
    	}
    
    	public void deleteItem(Item item) {
    		if (!player.getControlerManager().canDeleteInventoryItem(item.getId(), item.getAmount())) {
    			return;
    		}
    		Item[] itemsBefore = items.getItemsCopy();
    		items.remove(item);
    		refreshItems(itemsBefore);
    	}
    Toolbelt.java
    Line 85
    Code:
    player.getInventory().deleteItem(invSlot, item);
    I tried changing invSlot to slot, to no avail.
    You're calling Toolbelt::addItem incorrectly. You're sending the item ID as the slot ID. Post the code where your call Toolbelt::addItem from, probably InventoryOptionsHandler.
    Project thread
    Reply With Quote  
     

Page 1 of 2 12 LastLast

Thread Information
Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)


User Tag List

Similar Threads

  1. Need help with adding a new prayer
    By Ferret in forum Help
    Replies: 0
    Last Post: 01-20-2020, 09:50 PM
  2. [PI] Issues with adding data
    By 1047881l in forum Help
    Replies: 2
    Last Post: 03-15-2017, 12:18 PM
  3. [PI] Issue with adding commands
    By JesusAlmighty in forum Help
    Replies: 5
    Last Post: 09-14-2014, 04:14 PM
  4. Adding a new .java file
    By dadabehh in forum Help
    Replies: 11
    Last Post: 08-01-2009, 10:56 PM
  5. Help with adding new items.
    By Markk in forum Help
    Replies: 0
    Last Post: 01-19-2009, 12:28 AM
Posting Permissions
  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •