Jump to content

AutoHotKey-Like Vertical Dropping/Custom Dropping


Muffins

Recommended Posts

  • 2 weeks later...

Don't use that code. At no point is the Item defined, so he's having to constantly retrieve a single item from the Inventory class multiple times. This is very inefficient. The parameters are also a limitation too. There may be other conditions you wish to set before dropping anything. I'd go for something like this:

	// From int[] to Integer[] because Arrays.asList(Object) doesn't work with primitive type arrays
	public static final Integer[] VERTICAL_DROP = { 0, 4, 8, 12, 16, 20, 24, 1, 5, 9, 13, 17, 21, 25, 2, 6, 10, 14, 18, 22,
			3, 7, 11, 15, 19, 23 };
	
	public static final List<Integer> VERTICAL_DROP_AS_LIST = Arrays.asList(VERTICAL_DROP);
	
	public void dropAll(Predicate<Item> filter) {
		
		VERTICAL_DROP_AS_LIST.forEach((index) -> {
			
			// Acquire item once, store it as a variable
			Item item = getInventory().getItemInSlot(index);
			
			// Validate the item before interacting with it, also only use filter if one exists
			if (item != null && item.hasAction("Drop") && (filter != null && filter.test(item))) {

				item.interact("Drop");
				
				/*
				 * Item#interact(String...) returns a boolean, which you could
				 * wrap in a selector (IF) for better handling
				 */
			}
		});
	}
	
	public void dropFish() {
		
		// Lambda this shit the fuck up!
		dropAll((item) -> item.getName().equals("Trout") && !item.isNote());
		
	}
	

I haven't actually tested this, but it should work. smile.png

 

If you want to go full autist you could have the Integer array explicitly defined within the parameters of the Arrays#asList(Object) method. This would just mean you wouldn't need to define VERTICAL_DROP as a global constant. It's justified too, since VERTICAL_DROP is only ever likely to be referenced once. However having VERTICAL_DROP as mostly dead code isn't going to rip holes in time and space. smile.png

VERTICAL_DROP's type needed to be an array of Integer objects and not the primitive type why? They are just indexes. Why did you need to make it into an array list also?

 

dropAll should return a boolean, that is outside of the for loop. Maybe something like use a counter and ++ it every loop iteration, then return Inventory.getCount == 28 - counter. I assume that would work, never tried it though.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...