Pack: Rocket Jump
Version: 1.1.0 (2023/07/01)
License: LGPL-3.0, 'view LICENSE.txt'
Author: agent_00ming
Curseforge: https://www.curseforge.com/minecraft/texture-packs/rocket-jump
Modrinth: https://www.modrinth.com/datapack/rocket-jump

Feel free to browse the datapack. Keep in mind that it's licensed under LGPL-3.0(*1)
so you may use it in your own work provided that the parts that you use from this
datapack are open sourced to the end user. Those parts and their modifications must
also be licensed under LGPL-3.0.

1| https://www.gnu.org/licenses/lgpl-3.0.en.html

There will be a feature update in the near future including more mechanics to
complement the existing ones. Possible additions in a separate datapack. Check the
curseforge/modrinth pages for latest news/releases.

If you're new to datapack development or want a custom built datapack, you can contact
the author for help.


Datapack content:

[Mechanics]:

Crafting custom fireworks: (Depends on Crafting setting)

You can craft the custom fireworks by putting any single 'Firework Rocket' into a
crafting grid. It'll show up as 'Infested Deepslate' but that's just a placeholder
and you will still receive the correct amount as 'Rocket Jump Firework'. Only
fireworks with the tag 'rocketjump:firework' will be picked up by the datapack so
you can rename those fireworks in an Anvil and they will still work.


Rocket jump: (Depends on Enabled setting, Modified by Quality setting)

Most straightforward. Load a 'Rocket Jump Firework' into any Crossbow and shoot it
at a solid block's top surface and it will detonate on contact. You will be pushed
away by the explosion if you are standing near it. Jumping right as it explodes
will grant you significantly more vertical momentum while sprinting into it grants
you more horizontal momentum. You may combine those two for maximum distance. Using
a Multishot Crossbow will send you flying or whoever gets caught in the blast flying.

On Quality setting 3, all mobs/players rocket jumping leave a smoke trail.
On Quality setting 2, the players rocket jumping leave a smoke trail.
On Quality setting 1, the players rocket jumping don't leave a smoke trail.
On Quality setting 0, same as 1 but Crit and Score mechanics are disabled globally


Crit/Critical hit: (Depends on and modified by CritsMode setting, Opt-out)

If on setting 0, this mechanic is disabled globally

If on setting 1, while falling during a rocket jump, the rocket jumper will receive a 
5x damage modifier and the Glowing effect only when they are holding a shovel of any 
material. The rocket jumper can only crit once per rocket jump. Chained rocket jumps 
resets your crit state. Having the Slow Falling effect limits the damage modifier to
2.5x. Players can opt out using '/trigger rktjmp-optout-crithit'

If on setting 2, same as setting 1 but the rocket jumper can hold any melee tool/weapon 
made of any material. (includes Trident but a thrown Trident is unaffected by the crit).


Score/Scoreboard: (Depends on AirScore setting, Opt-out)

Alright, here we go. The score mechanic tries to calculate a score of a player's
rocket jump based on their performance. In simple terms, performance is how flashy
a player can make their rocket jump look. In it's entirety, performance is quite
complicated, being split into two parts: 'raw score' and 'multiplier'. Death during
a rocket jump resets your scores without saving them. Scores are saved for each player
on the scoreboard every time they attain a new personal best. The scoreboard can be
displayed by using '/scoreboard objectives setdisplay sidebar rktjmp_scoreboard'.
Players can opt out of their own score tracking by using '/trigger rktjmp-optout-airtime'

Raw score is how much air time you accumulate thoughout a rocket jump. The table
below shows all actions that affect raw score. Descriptors are compounding.

    Gaining height: 5 points/tick
        Levitation: -2 points/tick
        Elytra: 0 points/tick to -5 points/tick ([0,500+]pts, linear)
        Levitation and Elytra are mutually exclusive, Levitation is prioritized
        Bounce: -1 points/tick to -6 points/tick ([1,3+] bounces, ≈ quadratic)

    Losing height: 7 points/tick
        Slow Falling: -4 points/tick
        Elytra: 0 points/tick to -5 points/tick ([0,500+]pts, linear)
        Slow Falling + Elytra: -7 points/tick
        Bounce: -1 points/tick to -7 points/tick ([1,3] bounces, ≈ quad.; 4+ flat)

Multiplier is how much your score is worth in %. Your raw score is multiplied by 
your multiplier at the end of a rocket jump, the result is your final score which
is shown to to you and written to the scoreboard. The table below shows all actions
that affect your multiplier. Descriptors are compounding.

    Starting rocket jump: 100%
        Multishot: +25%

    Chained rocket jump: +25% up to 250% {max}
        Elytra: +25% up to 250% {max}

    Bounce: +25% on first bounce, 250% {max}
        4+ bounces: -10% per bounce down to 100% {min}
        Bounces are reset at the end of the rocket jump

    Elytra flying up: -1%/tick down to 50% {min}

    Slow Falling effect: -1%/tick down to 150% {min}

    Critical hit: 'current multiplier' * 2
        View 'Critical hit' mechanic


[Settings]:

Settings can be changed via commands or through the interactive settings book.
Scores and tags are named 'rktjmp-NAME'. Scoreboards are named 'rktjmp_NAME'
You will need to run '/function rocketjump:config/reload' when changing settings
using commands or weird things may happen.
Command for the book: /function rocketjump:config/book

The configurations are saved in two independent lists. You can edit the buffer
list through the book and applying the changes will swap the two so if you don't
like the changes you just made, you can just apply the changes again.
A sidebar with buffer values will be shown to players holding the settings book.
Swap the book between your main hand and offhand if the sidebar is not visible.
Scoreboard names: rktmp_configbuffer, (rktjmp_config)

Enabled (rktjmp-enabled): Enables/disables the rocket jump mechanic
    Ranges from 0 to 1, Default: 1

Crafting (rktjmp-crafton): Enables/disables the crafting of custom fireworks(*1)
    Ranges from 0 to 1, Default: 1

NoGrief (rktjmp-nogrief): Allows/disallows rocket jump explosions to damage blocks(*2)
    Ranges from 0 to 1, Default: 1

AirScore (rktjmp-airtime): Enables/disables the score mechanic
    Ranges from 0 to 1, Default: 1

MaxTime (rktjmp-maxtime): Minimum number of ticks grounded to end a rocket jump
    Ranges from 1 to +, Default: 2

CritsMode (rktjmp-crithit): Changes/disables critical hit mechanic
    Ranges from 0 to 2, Default: 1

Quality (rktjmp-quality): Changes rocket jump mechanic behaviour, affects performance
    Ranges from 0 to 3, Default: 3

Persist (rktjmp-persist): Allows settings to persist through reloads
    Ranges from 0 to 1

1| Applies the 'doLimitedCrafting' gamerule

2| Toggles the 'mobGriefing' gamerule for 2 ticks on explosion, assumes that it's true



    === Spoilers beyond this point ===



[Advancements]: 35 normally obtainable (listed below), 49 total(*1).

"Rocket Jump" (root)
|>
   "Fire-works"
    |>
        "Explosive!"
        |>
        |   "Score Branch"(*2,3)
        |   |>
        |       ""Safe" Landing"
        |       |>
        |       |   "Guru"
        |       |   |>
        |       |       "Maven"
        |       |       |>
        |       |           "Virtuoso"
        |       |           |>
        |       |               "Soldier"
        |       |
        |       |>
        |       |   "Novice"
        |       |   |>
        |       |       "Amateur"
        |       |       |>
        |       |           "Expert"
        |       |           |>
        |       |               "Specialist"
        |       |
        |       |>
        |           "Bonus Score"
        |           |>
        |               "Maxed Multiplier?"
        |               |>
        |                   "Ascended"
        |
        |>
        |   "Misc. Branch"
        |   |
        |   |>
        |   |   "Explosive Trickshot"
        |   |>
        |   |   "Miscalculated trajectory"
        |   |   |>
        |   |       "Counter-Attack!"
        |   |
        |   |>
        |   |   "Grumpy Mount"
        |   |>
        |       "草 'Grass'"
        |
        |>
            "Crit Branch"(*5)
            |>
                "CRITICAL HIT!!!"
                |>
                |   "Get Forked!"
                |   |>
                |       "All Advancements"(*4)
                |
                |>
                |   "One Bird One Stone"
                |   |>
                |       "Two Birds One Stone"
                |
                |>
                |   "Superhero Landing"
                |   |>
                |   |   "Three Birds One Stone???"
                |   |   |>
                |   |       "Fish Out Of Water"
                |   |
                |   |>
                |       "Soul Soiled"
                |       |>
                |           "Turned A Blind Eye"
                |
                |>
                    "F = m * a"
                    |>
                        "No Witnesses"

1| 11 serve to trigger functions, 2 are decorative and 1 shows the credits

2| 'Name' branch advancements are granted when their sub-advancements are completed

3| Score branch advancements require AirScore setting enabled and not being opted out

4| "All Advancements" is granted once all branches are completed

5| Crit branch advancements require CritsMode setting enabled and not being opted out




[Walkthrough]:

Score related advancements are for scoring points while rocket jumping.
Score advancements are spaced apart by 1000 points each starting at 1000 (Novice)
to 8000 (Soldier) and are granted for personal best scores.
Multipler advancements are granted for stacking a certain percentage of
score multiplier: >100% (Bonus Score), 500% (Maxed Multiplier?), >500% (Ascended).
Score/Multiplier mechanic explained in [Mechanics] section.

"Explosive Trickshot"
Kill a mob with a ranged attack (Bow/Crossbow/Thrown Trident) while rocket jumping.

"Miscalculated Trajectory"
Die while rocket jumping. (includes but not limited to fall damage death)

"Counter-Attack!"
Die to a mob crit.

"Grumpy Mount"
Mount a horse during a rocket jump.
Reference: GameGrumps horse landing 2017

"草 'Grass'"
Have your crit blocked by grass when your crosshair is right on target.
Reference: '草' is grass in Japanese, is used like 'LOL' culturally

"CRITICAL HIT!!!"
Kill a mob with a critical hit.
Reference: Team Fortress 2 critical hit, specifically 'Soldier' and 'Market Gardener'

"Get Forked!"
Kill a mob with a critical Riptide hit.

"One Bird One Stone"
Kill a Ghast with a critical hit.

"Two Birds One Stone"
Kill a Phantom with a critical hit.

"Superhero Landing"
Kill any of the following mobs with a critical hit:
Elder Guardian, Ender Dragon, Wither, Warden.

"Three Birds One Stone"
Kill the Ender Dragon with a critical hit.

"Fish Out Of Water"
Kill an Elder Guardian with a critical hit.

"Soul Soiled"
Kill the Wither with a critical hit

"Turned A Blind Eye"
Kill the Warden with a critical hit

"F = m * a"
Land a critical hit worth 19 damage or less while under the effect of Slow Falling

"No Witnesses"
Kill a mob with a critical hit while under the effect of Invisibility
