Extend beacon ranges via different materials and more steps for valuable materials
solonovamax opened this issue · 0 comments
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.