Board Thread:Suggestions forum/@comment-31507215-20180317163310

Today, I am suggesting Grappling Hooks.

I will try to keep it simple, but my reason for suggesting them is to make ropes more realistic, but still have a way to use them to scale walls. I know grappling hooks are probably planned, and might be considered obvious, but (if that is the case) I am hoping that this suggestion is sufficiently concrete, and has enough helpful ideas to be worthwhile.

Grappling Hooks
The Grappling Hook would be a new item. It could be crafted something like this:

or, if Iron Nuggets are added, it could be crafted like this:

However they would be crafted, grappling hooks would be throwable. When you right-click with one in your hand, you would throw it with a force roughly equal to that of a throwing axe. Once thrown, a grappling hook would have a model close to that of a throwing axe or spear, but preferably in three dimensions, like an arrow. If a thrown grappling hook hits an NPC or other entity, it would deal damage and then fall off of the entity and hit the ground. If a thrown grappling hook hits a solid block, it would stick in the block like an arrow or spear. If you walk near a stopped grappling hook, you would pick it up.

Now, for grappling hooks to be truly useful, they would have to be attached to ropes. To attach ropes to a grappling hook, you would craft a grappling hook with up to eight ropes (either normal or elven, but not both). The item this would yield would have a slightly different item texture (to show which rope type is attached), and would also have something in its NBT data (the Damage tag or the Count tag would probably work, but a new tag would be fine, too) to keep track of how many ropes have been attached to it. A number on the inventory item (perhaps where it shows how many items are in a stack) would show the number of ropes connected to the hook. You would be able to attach more ropes to a hook by simply crafting a grappling hook (either empty, or with ropes) with more ropes on a crafting table. You would not be able to have more than 64 ropes attached to one grappling hook at any time. You would also be able to remove all the ropes from a hook by putting the hook onto a crafting grid. The items in the output slot would be ropes (with a number equal to that of the ropes on the hook), and removing the ropes will return the hook to normal, and return it to your inventory.



If you throw a grappling hook that has been connected to ropes, it would be thrown the same way as an empty grappling hook, but the entity would have a variable in its NBT data (like the item) that would keep track of how many ropes are connected to it. When a grappling hook that has been connected to ropes hits a solid block, it would stick to the block like normal, but would also place some (or all) of its ropes. Here is how I think it should work:

When the grappling hook hits a block, it would see what side of the air block it is in. It will then place a rope facing the opposite direction (so that the rope is on the same side of the block as the grappling hook). If the hook lands on the ground, it would place a rope facing upwards (and therefore on the ground), as suggested here.

Once it has placed the first rope, it will follow this loop:

If the most recently placed rope is facing up: If said rope was the first to be placed: Find out where the player is. Determine which cardinal direction the player is in (from the rope.) If the block adjacent to the rope, in the direction found above, (block1) is air: If the block below block1 is air: Place a rope in this block, facing opposite the most recently placed rope. Otherise: Place a rope in block1, facing up, running towards the player. Otherwise: End the loop. Otherwise: If the block adjacent to the rope, in the direction the rope is running, (block1) is air: If the block below block1 is air: Place a rope in this block, facing opposite the most recently placed rope. Otherwise: Place a rope in block1, facing up, continuing in the direction of the previous rope. Otherwise: End the loop. Otherwise: If the block below the most recently placed rope is air: Place a rope in that block, facing opposite the most recently placed rope Otherwise: If the block adjacent to the rope, in the direction the rope is facing, (block1) is air: If the block below block1 is air: Place a rope in this block, facing opposite the most recently placed rope. Otherwise: Place a rope in block1, facing up, running in the direction the previous rope is facing. Otherwise: End the loop.

Everytime a rope is placed, the grappling hook's rope count would decrease by one. It would continue this loop until it runs out of ropes. If the loop stopped early, any unused ropes would remain attached to the hook, and would be picked up (still attached to the hook) if the hook is picked up. If all of the ropes are placed, the hook would return to normal, and would not be attached to any ropes if picked up.

Changes to Ropes
I know some of these have already been suggested, but these changes would be necessary for this suggestion to be worthwhile.
 * Neither type of rope would be able to be placed up walls (by right-clicking on already placed ropes while looking upward) anymore. You would, however, still be able to place ropes down walls.
 * Standard Rope would be able to be pulled up from above (the way Hithlain rope can be), but not pulled down from below.
 * Ropes would be able to be placed parallell to the ground, as suggested here, but this should also be implemented for non-elven ropes, at least to some extent.
 * This may be considered a bug, but ropes that are not directly attached to a block (but attached below other ropes) should be picked up when a player right-clicks on a rope on the same line. (They currently turn into items and fall to the ground.)

I know that these mechanics are not super realistic, nor ideal, but they shouldn't be extremely hard to code, and would be more realistic than the way ropes currently work. (Besides, it's Minecraft!)

If you notice that I missed something, or you wish for clarification, please tell me and I will do my best to clear it up!

 