Skip to content

Reeling Rods - Module #1104

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 100 commits into
base: master
Choose a base branch
from
Open

Conversation

runcows
Copy link
Contributor

@runcows runcows commented Mar 8, 2025

Reeling Rods

A module that expands the capabilities of all fishing rods, as well as adding 2 new fishing rod enchantments (Reeling and Barbed) which are mutually exclusive.

These are the first GM4 custom enchantments using the vanilla system; they are intentionally not metallurgy shamirs.

All Rods

Added the following capabilities to all fishing rods:

  • Pull Paintings off walls *
  • Steal first the item from an item frame, and then pull the item frame off the wall *
  • Snatch leashed mobs from leash knots *
  • Pull shulkers towards you *
  • Try and fail to pull in an end crystal (it explodes) *
  • Dismount the pulled mob from what they're riding (Bedrock Parity)

* These entities can be hooked with a fishing rod, but in vanilla the only thing that happens is durability gets used.

Reeling

Reeling is an enchantment that revolves around stealing or yoinking certain items from entities.
These interactions are locked behind an enchantment either for balance reasons, or gameplay reasons, allowing normal rods to maintain the interaction of simply pulling the entity.
Reeling has only 1 level and adds the following interactions on pulling in the entity type:

  • Pull the chest from chest boats, emptying the items on to the ground
  • Pull the associated block type from minecart variants
  • Steal armor from armored wolves
  • Steal a snow golems carved pumpkin
  • Steal a sheep's wool right off their skin
  • Steal a mooshroom's mushrooms, turning them into cows
  • Steal honeycomb from a bee carrying nectar, making it angry at you
  • Steal a horse's armor and saddle
  • Steal saddles from mobs that can wear saddles
  • Steal chests from ChestedHorses, emptying the items on to the ground
  • Steal carpets from llamas' backs
  • Steal armor from mobs that can wear armor from survival means
  • Steal held items from mobs that can hold items in hands *
    • Stealing a held item from a villager sells out that trade and gives the player a 20 major negative reputation
    • Stealing a trident from a drowned will roll a random chance with a 11.5% chance of success (unless the mainhand drop chance is not default) this is the same chance as using looting 3. If the chance fails, the trident will break.
  • Steal a happy ghast's harness
  • Steal an enderman's held block

Barbed

Barbed is an enchantment that revolves around dealing damage, turning a fishing rod into a lethal weapon. It has 5 levels.
Barbed applies an initial scratching damage to the hooked mob on pulling and then bleeding damage over time.
The level scales both the scratching damage, and the frequency of bleeding damage.
Damage over time lasts 3 seconds, regardless of enchantment level.

Notes

  • Stealing equipment with Reeling
    • Might want to investigate Add Opt-In Logging to Modules Usable as Griefing Tools #1037 for player theft moderation
    • Stealing is treated as an action for reeling, and the entities that can be stolen from are listed in type tags. To give one of these entities an alternate action, remove them from the relevant steal_* entity type tag and implement the stealing following the example of how villagers are set up.
    • Villager stealing: Currently, armor theft does not cause reputational harm to the player. However, this is easy to change.
    • Illager types: can only have hand items stolen, despite being able to wear armor through commands. This is because armor does not render on them, nor is there a way to put armor on them in survival like in the case of villagers.
      • A consequence of this is that pillager captain banners cannot be stolen
  • Enchantment Balancing
    • Could be exclusive to mending or unbreaking if it is deemed necessary for balance
  • Ideas rejected
    • Pufferfish: Wanted to puff them up, but setting PuffState has issues. Set once is fine. Then after it deflates a bit, setting again flashes and then reverts, having a jarring visual effect. This is probably a MC bug.

To-Do:

  • Readme check and maybe make a gif
  • Guidebook review
  • ???

@runcows

This comment was marked as resolved.

@runcows

This comment was marked as outdated.

@Bloo-dev
Copy link
Member

* If a slot has a 0% drop chance, it should fail.
  
  * There are exceptions to that, where the 0% should be ignored (villager and vex mainhand)

* If a slot has a non-zero drop chance, drop should be guaranteed.
  
  * There are exceptions to that, where a chance is checked (trident drowned)

Agreed.

Remaining Questions

* Are there any other chances that should be checked, other than tridents on drowned?

* Is 8.5% a good drop chance for tridents off of drowned? It matches non-looting chances, but we can easily configure it to have a higher chance.

* For a 0% drop chance, is the fail behaviour breaking the slot or should it just not do anything?
  • I can't think of any right now.
  • 8.5% sounds good to me. I wouldn't be opposed to making it the looting III chance. When a chanced reel fails, it should break the equipment it was trying to reel.
  • 0% drop chance equipment should just be ignored. You could play a sound akin to the hook "slipping off" the piece.

runcows added 4 commits June 27, 2025 10:11
- if 0%, playsound and fail
- else, yoink
- there are exceptions for stealing mainhand
Also did some reorganization to make this easier to update in the future
- extend leash knot search range to 12 blocks
- add happy_ghast to leashable tag list
- add happy_ghast harness reeling
@runcows
Copy link
Contributor Author

runcows commented Jun 27, 2025

Implemented the drop chance rework as discussed above.

  • Currently drowned holding tridents are the only thing that will roll the random chance. Unless the drop chance is changed by something else, it will default to 11.5%, which is the same as looting 3.
  • 0% drop chance now plays a sound when fails instead of breaking the item

Also updated the module to work with 1.21.6

Copy link
Member

@Bloo-dev Bloo-dev left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Did a full (excluding Guidebook and the folder barbed/) code review.

Nothing that's wrong, but found some nitpicks.
You should go over the header comments again and make sure they match the spec outlined in our docs (docs/ folder)

Comment on lines +4 to +5
# with {bit, UUID}
# run from player/bit_{bit}_{value}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Whilst our header comment standard does not explicitly state how to handle macro information yet, we have been appending it to the parent function line, as a separate (optional) line seems a bit excessive. In the future we should manifest this in the standard.
You are right about only stating the keys, not the values, of the macro information. Make sure you state all keys supplied by the macro.

Suggested change
# with {bit, UUID}
# run from player/bit_{bit}_{value}
# run from player/bit_{bit}_{value} with {bit, UUID}

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Talked in DMs, agreed to shelve the topic of macros in function headers for a future discussion.

Quick summary: There is no consistent standard for macro information in function headers currently. Most modules just don't include anything. A separate line in the style I've done here is what I've been doing since the Blossoming Pots code review. There are a few other styles used in the repo. We should revisit this in a future discussion on code standards where we can standardize everything properly. Ideally headers should remain machine parsable.

I will leave this conversation unresolved, so as to not hide it.

@@ -0,0 +1,110 @@
{
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

NOTE for future us: I did not check this file.

@Bloo-dev Bloo-dev added tested Has passed in-game testing and removed needs-testing Requires in-game testing labels Jul 12, 2025
@runcows
Copy link
Contributor Author

runcows commented Jul 15, 2025

A couple notes pulled from generate_files.py to clean it up:

  • Stealing is treated as an action for reeling, and the entities that can be stolen from are listed in type tags. To give one of these entities an alternate action, remove them from the relevant steal_* entity type tag and implement the stealing following the example of how villagers are set up.
  • Villager stealing: Currently, armor theft does not cause reputational harm to the player. However, this is easy to change.
  • Illager types: can only have hand items stolen, despite being able to wear armor through commands. This is because armor does not render on them, nor is there a way to put armor on them in survival like in the case of villagers.
    • A consequence of this is that pillager captain banners cannot be stolen
  • Ideas rejected
    • Enderman: Wanted to steal held block, but it is stored as a block state, not as item data, making it difficult to steal the item.
    • Pufferfish: Wanted to puff them up, but setting PuffState has issues. Set once is fine. Then after it deflates a bit, setting again flashes and then reverts, having a jarring visual effect. This is probably an MC bug.

@runcows
Copy link
Contributor Author

runcows commented Jul 15, 2025

As a last minute addition, I added a reeling interaction for enderman. You can steal the enderman's held block as a falling block entity that gets launched at you

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
submission Brand new community submitted module tested Has passed in-game testing
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants