Skip to content

Reeling Rods - Module#1104

Merged
misode merged 108 commits into
Gamemode4Dev:masterfrom
runcows:fishing-rod-module
Aug 26, 2025
Merged

Reeling Rods - Module#1104
misode merged 108 commits into
Gamemode4Dev:masterfrom
runcows:fishing-rod-module

Conversation

@runcows
Copy link
Copy Markdown
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.

Copy link
Copy Markdown
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 thread gm4_reeling_rods/data/gm4_reeling_rods/function/id/loop.mcfunction Outdated
Comment thread gm4_reeling_rods/data/gm4_reeling_rods/function/tick.mcfunction Outdated
Comment on lines +4 to +5
# with {bit, UUID}
# run from player/bit_{bit}_{value}
Copy link
Copy Markdown
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
Copy Markdown
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
Copy Markdown
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.

Comment thread gm4_reeling_rods/generate_files.py
@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
Copy Markdown
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
Copy Markdown
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

@misode misode merged commit 9a07655 into Gamemode4Dev:master Aug 26, 2025
4 checks passed
github-actions Bot pushed a commit that referenced this pull request Aug 26, 2025
* Initial Commit

* Fix Version Compat

* Add player gamemode check

* Fix Allay HandItems[0] being removed instead of set empty

* Add shulker pulling

* Fix minecart fishing bobber vertical displacement off by 0.00001

* Fix Allay item summon wrong location

* Add witch potion stealing

* Slight python change

* Add villager theft

* Python changes to allow baby mobs to be processed

* Add fox theft

* Add witch theft limit

* Add pig desaddling

* Add strider desaddling

* Add snow golem beheading

* Add entity TODO list

* Add wolf armor stealing

* Add horse type mob item yoinking

* Fix Donkey and Mule code a bit

* Add Llama yoinking

* Python refactor & the start of Dismounting work

* Remove witch limit

* Fix file new line issue

* Switch to id based system for entity selection

* Intial commit for id changes

* Fix everything

* overwrite old

* actual overwrite old

* minor text fixes

* more fixes from the id change

* Fix wrong command syntax :(

* Re-Add smithed.entity ignore

* Change id tags to be removed when unneeded

* Vehicle separation passenger transfer

* Add live catch to recommended

* Misc comments because I need these file changes on my laptop to work on this while not at home

* misc beet changes

* py comment restructure

* Refactor in prep for generic item yoinking

* Refactor & Add Generic Hand/Armor Yoinking

* Update to 1.21.5

* Some comment changes

* Missed changes for 1.21.5

* Fix shulker teleporting

* Fix chest boat yoinking

* Rename function for clarity

* Add Sheep shearing yoinking

* Fix sheep wool yoinking
I was rushing before

* Fixes (hopefully)

* Add Binding blocking for equipment theft

* Add Entities
- Wandering Trader: Steal Hands
- Armor Stand: Steal Equipment
- Camel: Steal Saddle
- Mooshroom: Shear and steal shrooms
- Bee: Steal honey comb and suffer the consequences

* Optimize bobber id setting

* single comment change because nobody can stop me

* Fix my id changes & add sounds :D

* Change some player selectors to `@p`

* Change a few more player selectors to @p

* Shorten bee anger time

* Add Barbed Enchantment (#2)

* Add Barbed Enchantment

* Fix formatting

* Update apply_barbed_damage header

* Add missing comma

* Remove extra line

* Update non_treasure.json to include barbed

Needed for it to show up in enchanting table

* Fix barbed damage not running

* Increase Barbed Damage

* Adjust Enchantment Cost

---------

Co-authored-by: runcows <124551271+runcows@users.noreply.github.com>

* Fix overassigning ID causing breakage

* Adjust enchantment cost & rarity

* Remove excess entity_data storage

* Add Barbed Delayed Damage

* Fix Bleeding Damage not Starting

* Adjust Damage & Particles

* Add Custom Death Messages

* Adjust Enchantment Weights

* Fix Death Messages & Properly Reset Players on Respawn

* Fix Bleeding Damage not Triggering for non-Player Entities

* ID rewrite to use scores & optimization

* Swap enchantment name for translation string

* Big Reorganization

* Add Bloo to credits

* Missed renaming for reorganization

* minor changes

* Fix item data not being reset all the time

* Change barbed to explode tnt minecarts

* Rework hooked_entity/select_type to use bolt in file instead of generating file

* Add drop chance usage to reeling

* Drop Chance Rework
- 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

* Formatting Changes

* Update to 1.21.6
- extend leash knot search range to 12 blocks
- add happy_ghast to leashable tag list
- add happy_ghast harness reeling

* Fix item frame yoinking not respecting fixed tag

* Set module to not run if hooked entity is Invulnerable

* Upload Icon

* Uncomment Icon Design in beet.yaml

* Initial Guidebook and Readme

* Automated Guidebook Building Stuff

* Update gm4_reeling_rods/data/gm4_reeling_rods/function/id/loop.mcfunction

Co-authored-by: Bloo <git@bloo.boo>

* Update gm4_reeling_rods/data/gm4_reeling_rods/function/tick.mcfunction

Co-authored-by: Bloo <git@bloo.boo>

* A couple of header comments

* Update gm4_reeling_rods/generate_files.py

* Fail minecart & mooshroom if passengers

* Optimize reeling/stealable/steal_hand

* Clean `generate_files.py` and move a tag command

* Add enderman falling block yoinking, fix a logical error with motion function, adjust a few commands

* Update get_motion_to_player header comment

* Update gm4_reeling_rods/data/gm4_reeling_rods/function/get_motion_to_player.mcfunction
- Swear this is the last time. I got all nitpicky about the comments

* Translations file

* Forgot key in translations

* Add Panda to steal hand
- because I forgot them

* Update header in get_execution_pos

* Guidebook pages for reeling and barbed now unlock when getting an enchanted book with them on it

* Reword Guidebook Pages

* Add unreleased modrinth page id

---------

Co-authored-by: Bloo <git@bloo.boo>
runcows pushed a commit to runcows/GM4_Datapacks that referenced this pull request Sep 9, 2025
* New module: Reeling Rods (Gamemode4Dev#1104)

* Shrink Blossoming Pots pack.png

* Shrink Reeling Rods pack.png (Gamemode4Dev#1153)

* Update raw wood set file. Add cherry models and textures for bench, stool and chair. Remove version from spruce model files.

* Add Reeling Rods Smithed ID (Gamemode4Dev#1156)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

submission A new community submitted module, not yet concept-accepted tested Has passed in-game testing

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants