Beacon Overhaul

Beacon Overhaul

4M Downloads

Extend beacon ranges via different materials and more steps for valuable materials

solonovamax opened this issue · 0 comments

commented

I would like to be able to increase the range of a beacon significantly.

Currently, the maximum beacon range is a maximum of 70 blocks (vanilla 50 + 10 per tier, limited to just 2 tiers)
however, it would be nice if this could be increased further.

For example, instead of basing the range off of the tier + size of the base, it could instead be based off of the number of each type of block in the base.

And since I'm suggesting to increase the range of beacons, I'm also including a suggestion that increases the duration of the beacons, as the duration is directly proportional to the range, so it just feels natural to increase both. However, this part isn't the main reason why I'm creating this issue.

The tiers of beacons are comprised of the following number of blocks:

Level Blocks Range Duration
Base1 0 10 200 ticks
1 9 20 220 ticks
2 34 30 260 ticks
3 83 40 300 ticks
4 164 50 340 ticks

My recommendation for how much each block type will increase the range by is as follows:

Block Type Range Modifier Duration Modifier
Base1 10 200 ticks
Copper +.5 +1 tick
Iron +1 +2 ticks
Gold +2 +4 ticks
Amethyst +3 +6 ticks
Emerald +4 +8 ticks
Diamond +8 +16 ticks
Netherite ×1.15 ×1.15

Note: I specifically chose the netherite blocks to use a scalar, rather than constant, as netherite blocks are quite valuable, and thus I feel should multiply it. Additionally, for a max-tier beacon, the player must balance the number of netherite blocks vs diamond blocks to get the optimal range/duration.

Additionally, I recommend a base range of 10 blocks and a base duration of 200 ticks (as in vanilla), so the formula for both of those would be as follows:

// range
val rangeFromBlocks = (copper * 0.5) + (iron * 1) + (gold * 2) + (amethyst * 3) + (emerald * 4) + (diamond * 8)
val range = 10 + floor(rangeFromBlocks + rangeFromBlocks * (0.15 * netherite))

// duration
val durationFromBlocks = (copper * 1) + (iron * 2) + (gold * 4) + (amethyst * 6) + (emerald * 8) + (diamond * 16)
val durationTicks = 200 + durationFromBlocks + durationFromBlocks * (0.15 * netherite) 

If a beacon (of each tier) was constructed out of each type, here would be the resulting ranges & durations:

Block Tier 1 Range Tier 2 Range Tier 3 Range Tier 4 Range Tier 1 Duration Tier 2 Duration Tier 3 Duration Tier 4 Duration
Copper 15 blocks 27 blocks 52 blocks 92 blocks 10.45 sec 11.7 sec 14.15 sec 18.2 sec
Iron 19 blocks 44 blocks 93 blocks 174 blocks 10.9 sec 13.4 sec 18.3 sec 26.4 sec
Gold 28 blocks 78 blocks 176 blocks 338 blocks 11.8 sec 16.8 sec 26.6 sec 42.8 sec
Amethyst 37 blocks 112 blocks 259 blocks 502 blocks 12.7 sec 20.2 sec 34.9 sec 59.2 sec
Emerald 46 blocks 146 blocks 342 blocks 666 blocks 13.6 sec 23.6 sec 43.2 sec 75.6 sec
Diamond 82 blocks 282 blocks 674 blocks 1322 blocks 17.2 sec 37.2 sec 76.4 sec 141.2 sec

Additionally, it would be great if this could be entirely configurable, so that new modded ores can be added or durations/ranges adjusted.

I'm probably gonna fork the project and implement this in kotlin (because I like kotlin). If you'd like, I can PR this back.

Footnotes

  1. Note: by default, a beacon with no base will not produce any beam, as such it does not grant any effect. However, this is included, so as to show the range/duration, without any base modifiers. 2