Compare commits

...

578 Commits

Author SHA1 Message Date
dfsek 2e3ce78521 add ai guidelines 2026-01-09 21:41:33 -07:00
Zoe Gidiere c6eb2f49f3 Revert "Merge pull request #538 from ryzech/fix/caffeine-relocate"
This reverts commit 6929de7b61, reversing
changes made to a159debe3e.
2025-12-17 01:20:33 -07:00
Zoë Gidiere 6929de7b61 Merge pull request #538 from ryzech/fix/caffeine-relocate
Relocate caffeine to fix conflicts with other mods/plugins
2025-12-14 16:11:16 +00:00
Zoe Gidiere a159debe3e update publishing config 2025-12-13 17:55:17 -07:00
Zoe Gidiere 99e2907b2d add java doc build 2025-12-13 17:45:47 -07:00
Zoe Gidiere ac71b3ec0c Fix java doc dir 2025-12-13 17:41:21 -07:00
Zoe Gidiere e184937743 WIP Jenkinsfile 2025-12-13 17:34:13 -07:00
Zoe Gidiere 8c155c78eb step arg as min res 2025-12-13 11:35:39 -07:00
Zoe Gidiere fc779e1120 Auto-mode 2025-12-13 11:32:29 -07:00
Zoe Gidiere be964da4fa paper async 2025-12-13 10:48:18 -07:00
Zoe Gidiere 6ca401413b Terra Search Command 2025-12-13 10:34:01 -07:00
Zoe Gidiere e556e2bca1 Update Seismic 2025-12-13 10:33:18 -07:00
Zoe Gidiere 1fc97a480a Small biomechunk allocation opt 2025-12-11 14:44:32 -07:00
Zoe Gidiere bba55f2669 Align TriStateIntCache 2025-12-11 01:56:20 -07:00
Zoe Gidiere 97b4ea6d94 Improve PaddedGridDistributor Performance 2025-12-10 23:17:06 -07:00
Zoe Gidiere cf4f7822e2 Download JavaDocs and Sources in Idea 2025-12-10 23:16:39 -07:00
Zoe Gidiere d6285a5901 Improve TriStateintCache with Unsafe 2025-12-10 22:33:49 -07:00
Zoe Gidiere 8b933b0d5c Merge remote-tracking branch 'origin/master' 2025-12-10 19:28:43 -07:00
Zoe Gidiere f9a5dfbfce Update seismic 2025-12-10 19:28:39 -07:00
Zoë Gidiere 24bca3ed98 Merge pull request #542 from everbuild-org/fix/minestom-nbt-additions
Minestom Nbt Support
2025-12-10 18:57:19 -07:00
Zoe Gidiere f8f6b0b4bc Reformat 2025-12-10 18:52:00 -07:00
Zoe Gidiere dd2f0365b0 More Extrusion Opts 2025-12-10 18:49:03 -07:00
Christian Bergschneider ae2d801be0 perf: reduce object churn by swapping to long keys in GeneratedChunkCache 2025-12-11 02:33:40 +01:00
Christian Bergschneider 8578bba7b9 perf: reduce object churn by using minestom block states 2025-12-11 02:00:13 +01:00
Christian Bergschneider d262831107 feat: add basic minestom NBT additions and improve block state parser performance 2025-12-11 01:30:40 +01:00
Zoe Gidiere ddc8cc7db5 Reformat 2025-12-10 02:55:26 -07:00
Zoe Gidiere 12f1b3f8fc Use ASM to to compile extrusion pipelines 2025-12-10 02:54:44 -07:00
Zoe Gidiere dc7c57d1a3 Update seismic 2 2025-12-10 02:18:10 -07:00
Zoe Gidiere 309fb5af96 Update Seismic 2025-12-08 13:29:10 -07:00
RyzechDev 9d747aed71 Relocate caffeine to fix conflicts with other mods/plugins 2025-11-19 10:14:22 -06:00
Zoë Gidiere 3cf11a9ad4 Merge pull request #534 from AllayMC/feat/meta-pack
feat: add support for meta pack in allay platform
2025-10-14 13:34:24 -06:00
Zoë Gidiere 9f766b0647 Merge pull request #535 from PolyhedralDev/dev/1.21.10
Cleaned up Bukkit NMS bindings and marked 1.21.10 as supported
2025-10-14 13:33:51 -06:00
daoge_cmd 8fa3978dc8 feat: update resource files 2025-10-14 22:10:35 +08:00
OakLoaf c282e55f90 Adjusted paper dependency 2025-10-13 12:16:43 +01:00
OakLoaf 8b62badbdb Moved nms packages directly into the nms gradle module 2025-10-13 10:49:06 +01:00
OakLoaf 8bceb255c0 Corrected version formatting in supported versions list 2025-10-13 10:40:40 +01:00
OakLoaf ad80769d67 Removed version specific bindings 2025-10-12 22:48:41 +01:00
daoge_cmd 9d0fa0a7c4 Merge branch 'master' into feat/meta-pack 2025-10-10 10:04:15 +08:00
daoge_cmd 8c532ede8e fix: ignore the block when out of bounds 2025-10-10 10:03:01 +08:00
Zoë Gidiere c3d26527a7 parallel pack loading 2025-10-09 17:55:29 -06:00
Zoë Gidiere 1fe56335c8 Remove bufferedimage 2025-10-09 17:38:08 -06:00
Zoë Gidiere 3b377d91ee fix concurrency issues in openregistryimpl 2025-10-09 17:34:06 -06:00
daoge_cmd 0144200ec9 doc: update comment 2025-10-10 00:46:55 +08:00
daoge_cmd d1ad3d04e1 feat: add support for meta pack 2025-10-10 00:30:38 +08:00
Zoë Gidiere d640b49ded Merge pull request #533 from everbuild-org/fix/minestom-platform-fixes
Minestom 1.21.8/9/10 & Metapack support
2025-10-07 23:49:46 -06:00
Zoë Gidiere ecbfd1740c Fabric 1.21.10 2025-10-07 17:55:37 -06:00
Zoe Gidiere dc5952add7 WIP 1.21.10 2025-10-07 17:15:07 -06:00
Christian Bergschneider 1b6ebeb05f fix: improve particle handling and block state retrieval 2025-10-07 23:32:30 +02:00
Christian Bergschneider 234ff3e49c feat: actually do biome preloading 2025-10-07 23:23:54 +02:00
Christian Bergschneider 243c523b57 feat: pre-add biomes to registry to prevent future modifications 2025-10-07 23:06:58 +02:00
Christian Bergschneider 1700650753 feat: add methods to pack by meta and default meta in TerraMinestomWorldBuilder 2025-10-07 22:54:15 +02:00
Christian Bergschneider 12d2221d49 fix: ignore and warn on snbt on particles 2025-10-07 21:38:49 +02:00
Christian Bergschneider 42e1adfc3a chore: update minestom dependency 2025-10-07 21:38:26 +02:00
Zoë Gidiere 4ff91c9fea Revert "Update gradle"
This reverts commit 81bc51f5a1.
2025-10-07 12:53:36 -06:00
Zoe Gidiere 81bc51f5a1 Update gradle 2025-10-07 11:54:36 -06:00
Zoë Gidiere ac98726f81 Cleanup Fabric BlockState and EntityType Extended implementation 2025-10-06 18:12:42 -06:00
Zoë Gidiere 1d2c6d4294 Synchronize pack loading 2025-10-05 23:58:53 -06:00
Zoë Gidiere 9ca7014344 Entity SNBT Support and Cleanup 2025-10-05 23:50:29 -06:00
Zoë Gidiere 8d153998fa Reformat Code 2025-10-05 21:55:16 -06:00
Zoë Gidiere 2b09ed8fd9 Simplify mixin implementations
Refactors mixin implementations to remove unnecessary casting.

This change improves code readability and reduces redundancy by directly accessing methods and fields within the mixin context, rather than relying on casting to the target class.
2025-10-05 21:51:40 -06:00
Zoë Gidiere 96493ede15 Merge remote-tracking branch 'origin/master' 2025-10-05 20:24:25 -06:00
Zoë Gidiere 48586eb523 Fix SNBT writing 2025-10-05 20:23:54 -06:00
Zoë Gidiere a80b94ad45 Unwrap BlockState in Chunk Gen 2025-10-05 17:03:51 -06:00
Zoë Gidiere 089850d633 Support for SNBT in structures 2025-10-05 17:03:45 -06:00
Zoë Gidiere 42f3c56b71 Extended BlockState API 2025-10-05 16:47:12 -06:00
Zoë Gidiere 874ef56025 Update seismic 2025-10-05 16:44:49 -06:00
Zoë Gidiere 06f04005ea Merge pull request #526 from AllayMC/feat/allay-update
feat: update allay-api and resource files
2025-10-04 13:55:02 -06:00
daoge_cmd 774d076f77 build: enable build for allay platform 2025-10-04 17:21:22 +08:00
daoge_cmd e4561bd48f Merge branch 'master' into feat/allay-update
# Conflicts:
#	platforms/allay/src/main/java/com/dfsek/terra/allay/Mapping.java
#	platforms/allay/src/main/java/com/dfsek/terra/allay/handle/AllayItemHandle.java
2025-10-04 17:19:01 +08:00
daoge_cmd 550a037661 chore: remove unused okaeri maven repo 2025-10-04 17:14:49 +08:00
daoge_cmd 3b25e82a73 feat: use allay-api 0.12.0 2025-10-04 17:14:06 +08:00
Zoë Gidiere 9b3a105672 Fix game metapack loading 2025-10-03 19:07:00 -06:00
Zoë Gidiere 10558b5446 fix typo 2025-10-03 18:24:00 -06:00
Zoë Gidiere 326300bcce update resource logic for metapacks 2025-10-03 18:10:45 -06:00
Zoë Gidiere a7826dec49 add metapacks to default commented ingore list 2025-10-03 17:29:30 -06:00
Zoë Gidiere fd3d1ce830 Change ConstantRage check to only check if greater than 2025-10-03 17:11:12 -06:00
Zoë Gidiere 84a6cd0c26 fix bukkit spawning consistency 2025-10-03 15:49:55 -06:00
Zoë Gidiere d1faac8b96 Pull in remaining packs 2025-10-03 15:27:48 -06:00
Zoë Gidiere de4656d01f new pack name 2025-10-03 14:39:27 -06:00
Zoë Gidiere 6dba2e9394 Use latest OW 2025-10-03 13:59:54 -06:00
Zoë Gidiere 8a8db4a9b8 Merge pull request #445 from PolyhedralDev/dev/7.0-2
Dev/7.0
2025-10-03 01:01:49 -06:00
Zoë Gidiere c1a00ca5c7 reformat 2025-10-03 00:59:43 -06:00
Zoë Gidiere 2b5d613aef fix up 2025-10-03 00:54:53 -06:00
Zoë Gidiere 8bea1d23e0 Merge branch 'master' into dev/7.0-2 2025-10-03 00:51:05 -06:00
Zoë Gidiere fb5e597a11 Merge pull request #532 from PolyhedralDev/dev/1.21.9
Updated to 1.21.9
2025-10-03 00:49:23 -06:00
Zoë Gidiere 0990df0620 Merge branch 'master' into dev/1.21.9 2025-10-03 00:48:43 -06:00
Zoë Gidiere 451683aff5 spooky month (bump version to 6.6.6) 2025-10-03 00:35:24 -06:00
OakLoaf 41e9c2f55f Disabled AllayMC platform 2025-10-02 17:45:21 -06:00
Zoë Gidiere 4873b321cb update fabric build version 2025-10-02 17:33:31 -06:00
OakLoaf 64546bb154 Migrated to modern PaperCommandManager 2025-09-30 19:36:50 +01:00
OakLoaf d97478d2c4 Added separate version definition for runPaper task 2025-09-30 19:36:24 +01:00
OakLoaf 359b4826bc Corrected version in fabric.mod.json 2025-09-30 19:31:34 +01:00
OakLoaf 4b218a65f6 Refactored bukkit nms package 2025-09-30 19:00:36 +01:00
OakLoaf b88712e569 Fixed compilation errors 2025-09-30 18:51:25 +01:00
OakLoaf af509ebc3b Disabled AllayMC platform 2025-09-30 18:43:11 +01:00
OakLoaf a5c3733568 Updated dependencies for 1.21.9 2025-09-30 18:42:58 +01:00
daoge_cmd 3ef60f4b33 feat: adapt allay api 0.12.0-SHAPSHOT (waiting for 0.12.0 release) 2025-09-30 23:12:12 +08:00
daoge_cmd b7864bb6fb feat: use https://github.com/misode/mcmeta to replace the old je_block_default_states.json file (it's renamed to je_blocks.json now). 2025-08-21 11:51:17 +08:00
daoge_cmd 757ed6ad4d feat: update allay-api and mapping files 2025-08-21 00:11:36 +08:00
Zoë Gidiere 1ef12fdec0 Merge pull request #525 from PolyhedralDev/dev/wolves
More wolf fixes
2025-08-13 14:36:50 -06:00
OakLoaf 4e890f96e4 Corrected wolf variant spawn reasons list 2025-08-13 20:22:25 +01:00
OakLoaf 4e70ee99c9 Adjusted log scope 2025-08-13 20:22:03 +01:00
Zoë Gidiere b149497c60 Merge pull request #521 from PolyhedralDev/deps/cloud
Updated cloud-paper to resolve warning message
2025-08-11 21:34:11 -06:00
Zoë Gidiere d9f591bdb4 Merge pull request #524 from PolyhedralDev/dev/wolves
Made wolves generated with chunks correctly inherit variants
2025-08-11 21:34:01 -06:00
Zoë Gidiere a4b74e2e7f Merge pull request #522 from PolyhedralDev/dev/1.21.8
Added 1.21.8 support
2025-08-11 21:33:51 -06:00
OakLoaf b53d475f42 Made wolves generated with chunks correctly inherit variants 2025-08-01 16:53:32 +01:00
OakLoaf 4ddb741d0d Refactored packages for 1.21.8 2025-07-19 18:23:32 +01:00
OakLoaf 852f5aa610 Bumped dependencies 2025-07-18 16:02:54 +01:00
OakLoaf 953895a8d4 Bumped dependencies 2025-07-18 16:00:58 +01:00
OakLoaf 8788eab839 Added 1.21.8 bukkit support 2025-07-17 15:13:01 +01:00
Oak 2b62473372 Update Versions.kt 2025-07-17 14:13:40 +01:00
Zoë Gidiere b9187248c3 Merge remote-tracking branch 'origin/master' into dev/7.0-2 2025-07-13 17:03:38 -06:00
Zoë Gidiere 2d42810ba3 Merge pull request #513 from everbuild-org/fix/minestom-fine-grained-biome
minestom: remove fine-grained biome control from minestom
2025-07-13 16:44:25 -06:00
Zoë Gidiere 9f546370cd Merge pull request #519 from PolyhedralDev/feat/nmsplatform
Fixed NMSPlatform implementation
2025-07-13 16:44:10 -06:00
Zoë Gidiere 428bf341ef Better handling of internal addon 2025-07-13 15:47:48 -06:00
OakLoaf 8a61571ceb Fixed biome registering 2025-07-13 14:48:56 +01:00
OakLoaf b669f87b79 Merge branch 'refs/heads/master' into feat/nmsplatform 2025-07-13 14:22:00 +01:00
OakLoaf e507675ef6 Removed unused import 2025-07-13 14:21:45 +01:00
Zoë Gidiere 0fc2105ee6 update seismic version 2025-07-11 02:10:02 -06:00
Zoë Gidiere 77b077dd47 update seismic to snaphsot 2025-07-10 23:45:05 -06:00
Zoë Gidiere f38fcd03b0 Reformat 2025-07-10 21:53:17 -06:00
Zoë Gidiere af1e9de474 Merge branch 'master' into dev/7.0-2 2025-07-10 19:51:17 -06:00
Zoë Gidiere 3322a16f09 Fix particle releated crash on bukkit 2025-07-10 19:50:54 -06:00
Zoë Gidiere 78707468c5 Merge branch 'master' into dev/7.0-2 2025-07-10 19:44:30 -06:00
Zoë Gidiere c658d1a81b Merge remote-tracking branch 'origin/master' 2025-07-10 19:42:38 -06:00
Zoë Gidiere 56a7234494 Merge pull request #518 from PolyhedralDev/feat/nmsplatform
Implemented vanilla biome config options
2025-07-10 19:40:22 -06:00
Zoë Gidiere 217b708177 Update NMSPlatform.java 2025-07-10 19:40:05 -06:00
OakLoaf 7d86a41f65 Updates to particles 2025-07-10 11:29:31 +01:00
OakLoaf 753574fc9b Implemented vanilla biome config options 2025-07-10 11:14:22 +01:00
Zoë Gidiere 95f89ed2b6 reformat tesf test 2025-07-09 21:59:13 -06:00
Zoë Gidiere cb8aefe8d2 updates to particles 2025-07-09 19:31:48 -06:00
Zoë Gidiere cd8d6f0da3 fix build 2025-07-09 18:02:59 -06:00
Zoë Gidiere d33b75b77b Merge branch 'master' into dev/7.0-2 2025-07-09 16:48:22 -06:00
Zoë Gidiere 79f9488380 Merge pull request #515 from PolyhedralDev/dev/1.21.7
Bumped Cloud for Paper and Fabric version
2025-07-09 16:42:23 -06:00
Zoë Gidiere 4c2ce65cdc Some fixes to biome config 2025-07-09 16:41:53 -06:00
Zoë Gidiere 70c448dd0d Fix particles 2025-07-09 15:06:40 -06:00
Zoë Gidiere 3ad0ef8501 Update Seismic + paralihtic 2025-07-09 14:06:01 -06:00
OakLoaf 060bda2ec1 Bumped cloud-fabric version 2025-07-03 18:21:41 +01:00
Zoë Gidiere 6b60246694 Merge pull request #514 from PolyhedralDev/dev/1.21.7
Update to 1.21.7
2025-06-30 11:13:24 -06:00
OakLoaf 1a1f461550 Corrected version in fabric.mod.json 2025-06-30 17:57:19 +01:00
OakLoaf da20e282ce Updated Fabric to 1.21.7 2025-06-30 17:53:50 +01:00
OakLoaf 9b14b0ee96 Updated Bukkit to 1.21.7 2025-06-30 16:47:29 +01:00
Christian Bergschneider 89cbab071f refactor: remove fine-grained biome controls and adjust biome handling
Removed the deprecated `doFineGrainedBiomes` option from `TerraMinestomWorldBuilder` and associated classes. Updated biome management to use `IdentityHashMap` and added additional tracking for created biomes. Upgraded Minestom version to `1_21_6-a40d7115d4`.
2025-06-30 00:33:42 +02:00
Zoë Gidiere 71953c90a2 optimize imports 2025-06-28 19:05:20 -06:00
Zoë Gidiere 923cb08b37 fix build 2025-06-28 15:52:19 -06:00
Zoë Gidiere 21ef8c0dc4 Update Seismic 2025-06-28 15:47:08 -06:00
Zoë Gidiere 77b1960757 Use seismic func for perf 2 2025-06-28 15:47:02 -06:00
Zoë Gidiere a06c6fd980 Use Seismic function for perf 2025-06-28 15:46:28 -06:00
Zoë Gidiere 46f533ca9d Perf opts 2025-06-25 00:38:24 -06:00
Zoë Gidiere 9a61334f5a Merge branch 'master' into dev/7.0-2 2025-06-24 18:06:02 -06:00
Zoë Gidiere 118aeb872f Merge pull request #511 from PolyhedralDev/dev/wolves
Fixed wolf variant support for Paper platform
2025-06-23 13:17:18 -06:00
OakLoaf 5446b729f9 Finalised wolves 2025-06-19 21:44:24 +01:00
Oak d71c6bb25f Corrected checks 2025-06-19 21:22:06 +01:00
Oak d8524603c6 Implemented wolf variant support 2025-06-19 21:12:24 +01:00
OakLoaf 85234ddc39 Progress on wolves 2025-06-19 20:50:31 +01:00
OakLoaf 78162eaafe Added vanilla biome key to biome context 2025-06-19 20:49:57 +01:00
OakLoaf 7a041d8a63 Removed unused import 2025-06-19 20:49:37 +01:00
Zoë Gidiere 8cfa2e1467 bump version 2025-06-19 12:23:59 -06:00
Zoë Gidiere 5f367c0f2c Merge pull request #510 from PolyhedralDev/dev/multiverse-fix
Fixed issues causing plugin to fail to load if Multiverse is not present
2025-06-19 12:00:07 -06:00
OakLoaf f4db7fc507 Added initial wolf variant support (not functional) 2025-06-19 15:46:46 +01:00
OakLoaf ad9d16f48c Updated biome collection 2025-06-19 15:46:18 +01:00
OakLoaf 85b6dcc891 Moved all code that requires Multiverse imports into MultiverseGeneratorPluginHook 2025-06-19 14:24:04 +01:00
Zoë Gidiere 29691dfb4d Merge pull request #509 from everbuild-org/master
feat: backport latest minestom support from 7.0 branch
2025-06-18 17:49:21 -06:00
Christian Bergschneider 81eab13ce1 feat: backport latest minestom support from 7.0 branch 2025-06-19 01:42:31 +02:00
Zoë Gidiere a79a347765 temp fix tesf test file 2025-06-18 13:10:38 -06:00
Zoë Gidiere 46e603d681 Reformat 2025-06-18 11:43:35 -06:00
Zoë Gidiere 3f77b4a975 Minor cleanup 2025-06-18 11:37:50 -06:00
Zoë Gidiere 16755fa049 Merge branch 'master' into dev/7.0-2 2025-06-18 11:20:58 -06:00
Zoë Gidiere 68d5b22ca4 bump fabric dep version 2025-06-17 19:08:14 -06:00
Zoë Gidiere 40b8c85c75 Cleanup 2025-06-17 18:50:24 -06:00
Zoë Gidiere 63367e5f03 Final changes 2025-06-17 18:41:09 -06:00
Zoë Gidiere 1d95e7a87d Merge pull request #506 from benwoo1110/feat/multiverse-hook
Implement multiverse generator plugin hook
2025-06-17 16:23:19 -06:00
Zoë Gidiere a25e3cd5a5 Merge branch 'master' into dev/7.0-2 2025-06-17 16:16:41 -06:00
Zoë Gidiere b2e21d8b70 Merge pull request #508 from PolyhedralDev/dev/1.21.6
Dev/1.21.6
2025-06-17 15:34:38 -06:00
Zoë Gidiere 4041239b03 fix build 2025-06-17 15:28:47 -06:00
Zoë Gidiere 280699bbce Update to 1.21.6 and fix a lot of bugs in fabric impl 2025-06-17 15:21:21 -06:00
Zoë Gidiere c4dfdafce8 Merge pull request #507 from everbuild-org/dev/7.0-2
Update Minestom to latest version
2025-06-16 20:02:42 -06:00
Christian Bergschneider 3fe79338db refactor: replace DynamicRegistry.Key with RegistryKey across Minestom components
Updated all references from `DynamicRegistry.Key` to `RegistryKey` to align with the updated Minestom API. Adjusted relevant classes, methods, and object interactions to ensure compatibility and maintain consistency. Updated `Versions.kt` to the latest Minestom version.
2025-06-17 00:10:08 +02:00
Zoë Gidiere 6984dc29d0 Fix fabric 2025-06-14 00:45:32 -06:00
Zoë Gidiere bd253ea5d2 Merge branch 'master' into dev/1.21.6 2025-06-13 22:08:53 -06:00
OakLoaf d743d7d1df Updated fabric to rc1 2025-06-13 22:50:55 +01:00
OakLoaf 238a7954a7 Added paperweight to bukkit platform for runDevBundleServer task 2025-06-13 21:56:54 +01:00
OakLoaf c2319ca4ab Updated to 1.21.6-rc.1 2025-06-13 20:17:56 +01:00
Ben Woo 95172bfa7e Fix checkstyle for catch 2025-06-13 22:33:41 +08:00
Ben Woo 124dbc8836 Improve error checking for multiverse hook 2025-06-13 19:13:57 +08:00
Zoë Gidiere 8706340584 Fix wolves 2025-06-12 16:25:14 -06:00
OakLoaf 9a9f90aa0d Updated fabric platform to 1.21.6 2025-06-10 12:01:17 +01:00
OakLoaf 20a5bfdd0f Updated bukkit platform to 1.21.6 2025-06-10 11:44:10 +01:00
Ben Woo 4fee8cdb24 More example usages by iterating config pack 2025-06-10 12:06:24 +08:00
Ben Woo 70de38ffcb Fix exception variable name 2025-06-10 12:05:59 +08:00
Ben Woo 6722d22f72 Fix onarandombox repo url 2025-06-10 12:05:46 +08:00
Ben Woo c5526c86a2 Implement multiverse plugin hook 2025-06-09 22:58:41 +08:00
Zoë Gidiere 84fa72f96c Catch all runtime errors when loading packs 2025-06-07 22:14:36 -06:00
Zoë Gidiere cc5258ce73 bump version 2025-06-07 21:12:26 -06:00
Christian Bergschneider 7f324bd72b fix: remove unused player configuration phase in biome preload
The loop triggering the player configuration phase was removed as it is unnecessary and unrelated to biome preloading. This streamlines the function and avoids redundant operations during biome initialization.
2025-06-07 16:28:50 +02:00
Zoë Gidiere 748e027282 Merge pull request #505 from HaHaWTH/master
Identify Moonrise worker threads correctly
2025-06-07 07:18:45 +00:00
HaHaWTH bf6612edd0 Identify Moonrise worker threads correctly 2025-06-07 00:17:51 +14:00
Zoë Gidiere 4eace9e7fb Merge remote-tracking branch 'origin/master' into dev/7.0-2 2025-06-05 21:03:58 -06:00
Zoë Gidiere d90a4200fe Update gradle-build.yml 2025-06-05 19:19:43 -06:00
Zoë Gidiere 39ae1fdf93 Merge branch 'master' into dev/7.0-2 2025-06-05 17:51:01 -06:00
Zoë Gidiere af9fb211a8 bump fabric minecraft dep 2025-06-05 17:50:44 -06:00
Zoë Gidiere e9d1add6af Merge branch 'master' into dev/7.0-2 2025-06-05 17:21:00 -06:00
Zoë Gidiere e4395cec83 bump version 2025-06-05 17:18:55 -06:00
Christian Bergschneider 94d135c66c Refactor MinestomBiomeLoader to use DynamicRegistry directly
Simplified biome loading by removing dependency on MinecraftServer and using DynamicRegistry.Key directly. This improves code maintainability and aligns with updated API usage.
2025-06-05 17:04:37 -06:00
Zoë Gidiere 1881051191 Merge pull request #504 from everbuild-org/dev/7.0-2
Apply biomes to minestom instances
2025-06-05 08:16:00 +00:00
Christian Bergschneider 28132e0f13 resolve merge conflicts 2025-06-05 10:08:58 +02:00
Christian Bergschneider 1ef34469cb Merge remote-tracking branch 'ckyuri/dev/7.0-2' into dev/7.0-2 2025-06-05 10:03:50 +02:00
kyuri e79ea4ab82 Minestom Latest - Update (#499)
* Bukkit Build Fix

* remove comments

* remove papermc repo from gradle settings

* add back gradle shasum

* fix formatting, update gradle hash

* Minestom Updated to latest version as of now 4/12/2025

Updated method names to new documentation and changed minestom versioning.

- Paper Build version was changed as I had issues building at all with the snapshot version. So it was changed to a generic version but everything still builds fine.

* Bug Fix - Entity Type was parsing a value that was incorrect and causing issues to load the world.

EntityType.fromId(Integer.parseInt(id));
to
delegate = EntityType.fromKey(id);

* Reverted changes to comply with build version requirements and avoiding pulling functionality out of a common existing function

---------

Co-authored-by: Peter Pan <peter@never.lan>
Co-authored-by: Zoë Gidiere <duplexsys@protonmail.com>
2025-06-04 23:38:42 -06:00
Zoë Gidiere 4450a56ef0 Merge branch 'dev/7.0-2' into dev/7.0-2 2025-06-05 05:38:32 +00:00
Christian Bergschneider a061660e46 chore: Update Minestom version to 1_21_5-4d91778331
This commit updates the Minestom dependency to the latest tagged version. Ensures compatibility with new features and fixes in the updated Minestom release.
2025-06-04 21:52:46 +02:00
Christian Bergschneider abdff16a0a Merge remote-tracking branch 'origin/dev/7.0-2' into dev/7.0-2
# Conflicts:
#	buildSrc/src/main/kotlin/Versions.kt
2025-06-04 21:43:33 +02:00
Christian Bergschneider c08e973e3e feat: provide default MinestomBlockEntity implementation
Introduce the `MinestomBlockEntity` class to represent block entities and hook into the block system. Update `DefaultBlockEntityFactory` to create `MinestomBlockEntity` instances and adjust `TerraMinestomWorldBuilder` initialization for factory injection. These changes improve extensibility and block entity management.
2025-06-04 21:34:04 +02:00
Christian Bergschneider b12fe77f32 feat: add fine-grained biome control to Minestom world builder
Introduced a `doFineGrainedBiomes` flag to allow fine-grained biome control per chunk. This helps mitigate client disconnection issues caused by a Minestom biome encoding bug, with a plan to deprecate once the bug is resolved. Adjusted relevant classes and the example implementation to support this feature.
2025-06-04 21:25:35 +02:00
Zoë Gidiere bab8923f1e update overworld version 2025-06-04 00:21:14 -06:00
Zoë Gidiere 28d93d158e fix up 2025-06-03 22:52:26 -06:00
Zoë Gidiere 118dc32d64 Merge branch 'master' into dev/7.0-2 2025-06-03 22:38:32 -06:00
Zoë Gidiere b4068e6c59 Merge branch 'dev/1.21.5' 2025-06-03 22:28:48 -06:00
Zoë Gidiere b143c72d0e Dev/1.21.5 (#495)
* Bukkit Build Fix (#494)

* Bukkit Build Fix

* remove comments

* remove papermc repo from gradle settings

* add back gradle shasum

* fix formatting, update gradle hash

* Initial Fabric 1.21.5

* Updated dependencies

* Updated SpawnerData with backwards compat

* Updated dependencies

* Updated setBlockState usage - needs verifying as flags are confusing

* Refactored Bukkit NMS packages

* Initial attempt at updating mixin-commons

* Continue fabric 1.21.5 WIP

* Some additional logging

* Update deps

* Build fixes and update allay

* Add oak to authors

---------

Co-authored-by: Mikal <Ifiht@users.noreply.github.com>
Co-authored-by: OakLoaf <oak@beaconstudios.org>
2025-06-03 22:20:23 -06:00
Zoë Gidiere 5f5e70970b Add oak to authors 2025-06-03 21:40:14 -06:00
Zoë Gidiere ec812ef5fb Build fixes and update allay 2025-06-03 21:33:56 -06:00
Zoë Gidiere 85826071cb Update deps 2025-06-03 20:25:55 -06:00
Christian Bergschneider d9a4d64b17 Merge remote-tracking branch 'origin/dev/7.0-2' into dev/7.0-2 2025-06-04 00:05:56 +02:00
Christian Bergschneider 56a1feb708 refactor: move biomes to use user-defined naming conventions.
Replaced "Custom" with "UserDefined" in biome classes, factories, and references for consistency and clarity. Updated relevant imports, method signatures, and internal logic to align with the new terminology. This change improves readability and better represents the purpose of these biome-related components.
2025-06-04 00:05:15 +02:00
Zoë Gidiere c4f093210a Some additional logging 2025-06-03 15:15:07 -06:00
Christian Bergschneider 858adfe866 feat: initial custom biome implementation 2025-06-03 22:41:31 +02:00
Zoë Gidiere f14d22b264 Continue fabric 1.21.5 WIP 2025-06-03 13:59:11 -06:00
Zoë Gidiere bdd80d7832 Merge branch 'dev/seismic' into dev/7.0-2 2025-06-03 04:37:11 -06:00
Zoë Gidiere adfdb8d63c update versions 2025-06-03 04:37:03 -06:00
Zoë Gidiere ef10081bcd Merge branch 'dev/7.0-2' into dev/seismic 2025-06-02 17:34:30 -06:00
Zoë Gidiere dc8492a6cb Merge remote-tracking branch 'origin/dev/6.6.2' into dev/7.0-2 2025-06-02 17:34:18 -06:00
Christian Bergschneider 5e1c9d8ebe fix: generation stages not being able to reference eachother 2025-06-02 00:34:48 +02:00
Christian Bergschneider 5dff25670c refactor: minestom chunk storage to improve memory efficiency
Replaced 3D array with a 1D array for chunk block storage and adjusted related logic to use calculated indices. Updated block type comparison to use state IDs instead of block IDs for consistency and correctness.
2025-05-30 09:13:04 +02:00
Christian Bergschneider 089b25dea4 feat: update Minestom version and replace deprecated ItemComponent API
Updated the Minestom library to version 1_21_5-69b9a5d844 and migrated from the deprecated `ItemComponent` API to `DataComponents`. This ensures compatibility with the latest changes and improves maintainability.
2025-05-27 23:25:34 +02:00
Christian Bergschneider 1dd59c378e refactor(minestom): replace static singleton access to platform with dependency injection for better modularity
Renamed `MinestomPlatform` to `TerraMinestomPlatform` and updated `TerraMinestomWorldBuilder` to utilize the platform instance directly. Simplified world builder initialization and improved code clarity.
2025-05-27 22:58:16 +02:00
Christian Bergschneider d97fb4ff7b chore: update paper version 2025-05-27 22:50:03 +02:00
OakLoaf 016961c19c Initial attempt at updating mixin-commons 2025-04-17 17:41:45 +01:00
OakLoaf 9f3e225b62 Refactored Bukkit NMS packages 2025-04-17 16:32:59 +01:00
ckyuri 761a014ea5 Reverted changes to comply with build version requirements and avoiding pulling functionality out of a common existing function 2025-04-16 15:54:20 +01:00
ckyuri 9749eecd87 Merge remote-tracking branch 'origin/dev/7.0-2' into dev/7.0-2 2025-04-12 14:11:07 +01:00
ckyuri 32cc4976c8 Bug Fix - Entity Type was parsing a value that was incorrect and causing issues to load the world.
EntityType.fromId(Integer.parseInt(id));
to
delegate = EntityType.fromKey(id);
2025-04-12 14:10:54 +01:00
kyuri e2e0e292b7 Merge branch 'dev/7.0-2' into dev/7.0-2 2025-04-12 12:22:00 +01:00
ckyuri 227bfe7b29 Minestom Updated to latest version as of now 4/12/2025
Updated method names to new documentation and changed minestom versioning.

- Paper Build version was changed as I had issues building at all with the snapshot version. So it was changed to a generic version but everything still builds fine.
2025-04-12 11:54:48 +01:00
OakLoaf c95df25d30 Updated setBlockState usage - needs verifying as flags are confusing 2025-03-27 20:22:35 +00:00
OakLoaf 0adca3c227 Updated dependencies 2025-03-27 20:21:13 +00:00
OakLoaf 782b300d1f Updated SpawnerData with backwards compat 2025-03-27 19:22:34 +00:00
OakLoaf 967a4a0b2b Updated dependencies 2025-03-27 19:22:23 +00:00
Zoë Gidiere d3df5e56c3 Initial Fabric 1.21.5 2025-03-25 16:26:43 -06:00
Mikal dabc2359b3 Bukkit Build Fix (#494)
* Bukkit Build Fix

* remove comments

* remove papermc repo from gradle settings

* add back gradle shasum

* fix formatting, update gradle hash
2025-03-25 16:25:51 -06:00
solo 1d658bd52d Remove Allay Mappings Submodules (#493)
* Download allay mappings from github instead of using git submodules

Signed-off-by: solonovamax <solonovamax@12oclockpoint.com>

* Remove allay gitignore

Signed-off-by: solonovamax <solonovamax@12oclockpoint.com>

* Use the same dependency notation as the rest of the project

---------

Signed-off-by: solonovamax <solonovamax@12oclockpoint.com>
2025-03-25 15:14:51 -06:00
Mikal 52dc690243 Bukkit Build Fix (#494)
* Bukkit Build Fix

* remove comments

* remove papermc repo from gradle settings

* add back gradle shasum

* fix formatting, update gradle hash
2025-03-22 07:15:43 +00:00
Peter Pan d33d4af296 fix formatting, update gradle hash 2025-03-20 14:51:12 -04:00
Peter Pan fb0dbda296 add back gradle shasum 2025-03-20 11:01:41 -04:00
Peter Pan 4c860ca4ae remove papermc repo from gradle settings 2025-03-20 10:53:49 -04:00
Peter Pan b6e4543625 remove comments 2025-03-20 10:43:29 -04:00
Peter Pan 0921dfb204 Bukkit Build Fix 2025-03-19 15:54:11 -04:00
Zoë Gidiere 4bef2f5a7f Merge pull request #491 from PolyhedralDev/duplexsystem-patch-1
Update Mapping.java
2025-03-06 21:45:41 +00:00
Zoë Gidiere 18cb08b622 Update Mapping.java 2025-03-06 21:45:23 +00:00
Zoë Gidiere 1b15694878 Merge pull request #490 from AllayMC/dev/allay-api-0.2.0
feat: adapt allay-api 0.2.0
2025-03-06 21:32:44 +00:00
Dmitry Luk 267994427e fix: .gitignore 2025-03-07 01:05:15 +04:00
Dmitry Luk 248eb174d8 refactor: use submodules 2025-03-07 01:02:32 +04:00
Dmitry Luk 0a93b0fac3 fix: apply project code style 2025-03-07 00:39:22 +04:00
Dmitry Luk 03124cb008 refactor: mappings loading
docs: add how to use in README.md
2025-03-06 15:22:04 +04:00
Dmitry Luk 14a07602ee fix: correct bundle mapping [
6808d0e](https://github.com/GeyserMC/mappings/commit/6808d0e16a85e5e569d9d7f89ace59c73196c1f4)
chores: sort je default states and add new
2025-03-03 16:23:54 +04:00
daoge_cmd 167a712c0e feat: adapt allay-api 0.2.0 2025-03-03 19:52:25 +08:00
Zoë Gidiere 83bc2c9022 Bump Version 2025-03-02 06:42:12 -07:00
Zoë Gidiere 06a60b3db4 Merge pull request #489 from RitaSister/patch-1
fix crash chunk generate column in generate chunk process
2025-03-02 06:41:41 -07:00
Mirai 1b4824c5db fix crash chunk generate column in generate chunk process
The change removes the subtraction of one from properties.getMinHeight(), fixing a crash on version 1.21.4.
2025-03-02 09:57:48 +02:00
Zoë Gidiere 5892464a1d WIP Seismic Integration 2025-03-01 21:32:39 -07:00
Zoë Gidiere 8366a5288b fix minestom build 2025-03-01 15:45:30 -07:00
Zoë Gidiere d2b7384639 Merge branch 'master' into dev/7.0-2 2025-03-01 14:36:04 -07:00
Zoë Gidiere 49c6e70037 try catch downloading packs for offline usage 2025-03-01 10:48:58 -07:00
Zoë Gidiere c36b12e657 Fix Vanilla Features Spawning in Terra Biomes 2025-03-01 10:48:42 -07:00
Zoë Gidiere 8ffb09db36 Merge branch 'master' into dev/7.0-2 2025-02-28 11:36:23 -07:00
Zoë Gidiere 9906771fbc Merge pull request #472 from PolyhedralDev/ver/6.6.0
Ver/6.6.0
2025-02-28 04:31:06 +00:00
Zoe Gidiere e0a26046a0 Update Fabric version info 2025-02-27 19:51:18 -07:00
Zoe Gidiere 8bad33ef22 fabric 1.21.4 2025-02-27 19:33:51 -07:00
Zoë Gidiere f278ae7ab5 update licence 2025-02-26 22:34:41 -07:00
Zoë Gidiere a61c6b8a97 Merge remote-tracking branch 'everbuild-org/feat/platform/minestom' into ver/6.6.0 2025-02-26 10:22:37 -07:00
Zoë Gidiere 830ede9272 Merge pull request #484 from AllayMC/dev/allay-update
fix: adapt allay update
2025-02-26 10:20:43 -07:00
Zoë Gidiere 8e544a68d4 Merge pull request #483 from PolyhedralDev/dev/1.21.4
Add support for 1.21.4 on Paper
2025-02-26 10:20:25 -07:00
daoge_cmd e8e9f69fac feat: use allay-api 0.1.3 2025-01-26 19:48:23 +08:00
Christian Bergschneider 3a7d1a69d0 feat: use system property for configurable data folder path
Updated `getDataFolder` to allow customization via the `terra.datafolder` system property. This ensures greater flexibility for specifying the data folder location, while maintaining the default path if the property is not set.
2025-01-25 04:42:52 +01:00
Christian Bergschneider 7b29d25847 fix: remove unused application plugin from Minestom platform build script 2025-01-05 17:04:27 +01:00
Christian Bergschneider 810d10ac0a fix: move minestom example to own module 2025-01-05 16:58:28 +01:00
Christian Bergschneider aecc003f23 fix: minestom and slf4j as transitive dependencies 2025-01-05 16:49:20 +01:00
Christian Bergschneider d0bc006faa chore: reformat 2025-01-04 20:42:54 +01:00
daoge 98aadc816b feat: use allay-api 0.1.2 2025-01-04 17:49:38 +08:00
Christian Bergschneider 992ae592fd fix: Implement GeneratorWrapper interface in Minestom wrapper 2025-01-04 00:14:32 +01:00
Christian Bergschneider 7711e67999 feat: support reload 2025-01-04 00:10:35 +01:00
Christian Bergschneider 35bdc99873 build: make available via maven repo 2025-01-03 23:52:31 +01:00
Christian Bergschneider 5ba5d6efdd revert: block type implementation hint 2025-01-03 22:19:08 +01:00
Christian Bergschneider c848c33bc0 fix: add lighting engine to test server 2025-01-03 17:28:47 +01:00
Christian Bergschneider ff153ddc21 feat: allow external block entity implementations 2025-01-02 23:22:44 +01:00
Christian Bergschneider cb2841ed4f fix: Adjust progress bar update interval to every 60 ticks. 2025-01-02 20:54:56 +01:00
Christian Bergschneider 4f668adb67 feat: add chunk filtering for debugging and remove feature caching
Removed Feature caching since it was buggy asf
2025-01-02 20:49:07 +01:00
Christian Bergschneider 1d8a208d10 feat: implement platform enchantments 2025-01-02 19:32:14 +01:00
Christian Bergschneider 6279638363 feat: implement platform biome 2025-01-02 12:27:40 +01:00
Christian Bergschneider 23b846eca9 feat: get faster generation times 2025-01-02 00:48:26 +01:00
Christian Bergschneider d1f881ca2c feat: minestom entities 2025-01-01 20:39:09 +01:00
Christian Bergschneider b4ab3769b0 Merge branch 'ver/6.6.0' into feat/platform/minestom 2025-01-01 18:48:48 +01:00
Christian Bergschneider d5ab3e23f5 feat: better example server 2025-01-01 18:41:33 +01:00
Christian Bergschneider 3a28551e97 fix: generate populators in every chunk 2024-12-29 18:55:47 +01:00
Christian Bergschneider ac66fc7d69 fix: different populators now know about each other 2024-12-29 15:51:05 +01:00
Christian Bergschneider bfc1c32d46 feat: surface decoration generation but only in even chunks 2024-12-29 15:17:35 +01:00
Christian Bergschneider fa6e0e0ae4 feat: feature generation but only in even chunks 2024-12-28 21:41:51 +01:00
Christian Bergschneider f953c5085d feat: start generating features 2024-12-28 20:05:50 +01:00
Christian Bergschneider 7288373dbc feat: cache generated chunks
This commit is in preparation of multi-layered worldgen with minestom
2024-12-28 18:18:17 +01:00
Christian Bergschneider 983cb1f012 feat: base terrain generation with minestom 2024-12-28 12:22:07 +01:00
daoge_cmd 944c04b9b8 feat: use allay-api 0.1.0 2024-12-23 00:43:51 +08:00
Dmitry Luk 73a2c70794 chores: pretty-print biomes.json 2024-12-17 13:53:18 +04:00
daoge_cmd 088523222d chores: remove unrelated code reformatting 2024-12-17 13:17:11 +08:00
daoge_cmd 6badce6bc7 chores: use pretty print for je_block_default_states.json 2024-12-17 12:48:24 +08:00
daoge_cmd 92a5134458 revert: revert code format related changes 2024-12-17 12:43:46 +08:00
daoge_cmd 4222eef531 deps: use specified allay-api version 2024-12-17 12:31:03 +08:00
Dmitry Luk 9b6a503f31 fix: adapt allay update
* feat: update mapping files to latest
2024-12-16 23:28:19 +04:00
OakLoaf 82a9ecf736 Fixed typo 2024-12-12 15:24:38 +00:00
OakLoaf eec4db43b2 Added support for 1.21.4 2024-12-12 12:40:33 +00:00
OakLoaf 1d3c380784 Reverted to old methods grass and foliage color methods 2024-11-05 16:50:04 +00:00
OakLoaf 65e4c9a149 Removed comment 2024-11-01 19:46:34 +00:00
OakLoaf d4549643fc The definition of AwfulBukkitHacks 2024-11-01 16:46:33 +00:00
OakLoaf a87ad8c966 Bumped Paper version 2024-11-01 16:10:36 +00:00
OakLoaf 153f6e5a87 Recreated old reset tags method 2024-11-01 13:36:41 +00:00
OakLoaf a385a43250 Moved registry unfreeze 2024-11-01 12:02:49 +00:00
OakLoaf 3cd6aead64 Changed biome registry casting 2024-11-01 12:02:32 +00:00
OakLoaf 4f33b11828 Fixed issue with RegistryFetcher 2024-11-01 12:02:09 +00:00
OakLoaf f5bbaa3c3a Corrected class proxy 2024-11-01 11:57:35 +00:00
Zoe Gidiere 4fd84a3f2d Fix paralithic relocating 2024-10-31 13:42:41 -06:00
Zoë Gidiere bed67c211d Merge pull request #478 from PolyhedralDev/dev/let-expression
Add let expression support
2024-10-30 18:51:05 +00:00
Astrash 2c8d3416ab Load parse options before registering metaconfig 2024-10-30 14:04:40 +11:00
Astrash 5e43f0afef Add support for Paralithic let expressions 2024-10-30 14:04:40 +11:00
Zoe Gidiere ecbca608a5 Merge branch 'ver/6.6.0' into dev/7.0-2 2024-10-29 20:24:38 -06:00
Zoe Gidiere 02fdcee705 Fix fabric 2024-10-29 20:24:32 -06:00
Zoe Gidiere b4ab88a02e Fix allay reload 2024-10-29 16:13:29 -06:00
Zoe Gidiere ef1c9c125f Merge branch 'ver/6.6.0' into dev/7.0-2 2024-10-29 16:05:01 -06:00
Zoe Gidiere 4165224c51 Mark Cache Sampler Experimental 2024-10-29 16:04:55 -06:00
Zoe Gidiere e665e187c1 Fix up merge 2024-10-29 16:00:39 -06:00
Zoe Gidiere bd28d8170c Merge branch 'ver/6.6.0' into dev/7.0-2 2024-10-29 15:56:30 -06:00
Zoe Gidiere 710bbc33c9 Refractor bukkit to v1_21_3 2024-10-29 15:53:48 -06:00
Zoë Gidiere 1929239015 Merge pull request #473 from PolyhedralDev/dev/biomes3
Some refractors and updates to platofrm biomes
2024-10-29 20:27:42 +00:00
Zoe Gidiere 3ca90808f0 Fix up 2024-10-29 14:23:45 -06:00
Zoe Gidiere 9d91440997 fixup 2024-10-29 14:14:25 -06:00
Zoe Gidiere f98062d417 Merge remote-tracking branch 'origin/dev/bukkit/biome-settings' into dev/biomes3 2024-10-29 13:53:08 -06:00
OakLoaf 8df3a4dd02 Added NMSAddon override for BukkitAddon 2024-10-29 19:38:59 +00:00
OakLoaf afd2c81b19 Made grass colour use default if none is defined 2024-10-29 18:31:37 +00:00
Zoë Gidiere 4432ae4867 Merge pull request #476 from AllayMC/dev/support-world-unload
feat: support world unloading
2024-10-28 18:18:23 +00:00
daoge_cmd 16c951838b feat: support world unloading 2024-10-28 17:39:25 +08:00
OakLoaf 8de4f1198a Started adding more biome settings to bukkit 2024-10-26 10:02:32 +01:00
Zoe Gidiere d91e531fa5 fix allay 2024-10-25 16:28:00 -06:00
Zoe Gidiere 2a40f4af1e Merge branch 'ver/6.6.0' into dev/7.0-2 2024-10-25 16:14:54 -06:00
Zoe Gidiere 144c932703 mixin tweak 2024-10-25 16:09:42 -06:00
Zoë Gidiere e56b8856fa Merge pull request #474 from AllayMC/allay
feat: add support for allay platform
2024-10-25 16:05:58 -06:00
Zoe Gidiere d088d2f5a8 InlineVar 2024-10-25 15:59:38 -06:00
Zoe Gidiere 3d66386f99 Populate packs in a metapack under extended 2024-10-25 15:58:15 -06:00
Zoe Gidiere 1912d8e34c Fixup 2024-10-25 15:44:51 -06:00
Zoe Gidiere d48b610b39 Merge remote-tracking branch 'origin/ver/6.6.0' into dev/7.0-2 2024-10-25 15:21:47 -06:00
Zoë Gidiere 04f6d18198 Merge pull request #470 from PolyhedralDev/dev/1.21.2
Dev/1.21.2
2024-10-25 14:09:16 -06:00
Zoe Gidiere 640645b96b fix version 2024-10-25 14:03:27 -06:00
Zoe Gidiere a70738eda5 Version updates 2024-10-25 13:58:33 -06:00
OakLoaf 62756d2784 Updated Bukkit to support 1.21.3 2024-10-25 19:36:18 +01:00
Zoe Gidiere 32f8907cb1 Merge branch 'ver/6.6.0' into dev/1.21.2 2024-10-25 12:28:03 -06:00
Astrash b75e9c152e Refactor palette addon 2024-10-18 19:29:48 +11:00
Astrash c190485dbe Use more appropriate names in probability collection loader 2024-10-18 17:50:41 +11:00
Astrash e756953828 Use singleton impl for map based probability collections 2024-10-18 17:49:07 +11:00
daoge 071f9d39af docs: fix a typo in README.md 2024-10-15 10:03:54 +08:00
daoge_cmd d2107fd258 fix: chunkGenerator should be overwritten after reloading 2024-10-14 22:37:09 +08:00
daoge_cmd df3e623530 feat: implement config pack reloading 2024-10-14 22:13:54 +08:00
daoge_cmd f0d03d4538 feat: fallback to FLAT generator if config pack name is missing 2024-10-14 21:34:23 +08:00
daoge_cmd 84fe8792d6 fix: fix entrance in plugin.json 2024-10-14 21:33:59 +08:00
daoge_cmd 67fc2ba4dc docs: remove useless TODOs 2024-10-14 21:21:54 +08:00
daoge_cmd 8d63c40e2f refactor: replace 'var' with explicit type 2024-10-14 21:13:00 +08:00
daoge_cmd b0bc37c34d refactor: remove version info in mapping files 2024-10-14 21:05:06 +08:00
daoge_cmd f2c5c15650 refactor: use com.dfsek as the new package name 2024-10-14 21:02:07 +08:00
daoge_cmd f5de88215c build: use fixed allay api version 2024-10-14 21:00:15 +08:00
daoge_cmd 8a6ad95947 refactor: delombok and move version info to Versions.kt 2024-10-14 20:55:11 +08:00
daoge_cmd cc14c716bf build: move repo declaration to DependencyConfig.kt 2024-10-14 20:36:40 +08:00
daoge_cmd ece5213a87 feat: use macro in plugin.json and update author list 2024-10-14 11:33:40 +08:00
daoge_cmd a01f700653 build: rollback github action file changes 2024-10-14 11:24:54 +08:00
daoge_cmd 0ca7171bae docs: add README.md to allay platform 2024-10-14 11:23:59 +08:00
daoge_cmd 6261f0849c feat: remove java version declaration in allay platform as all platforms are in java 21 now 2024-10-14 11:23:27 +08:00
daoge 4fc24f022f Merge branch 'PolyhedralDev:master' into allay 2024-10-14 11:07:34 +08:00
daoge_cmd 61ed302137 feat: adapting terra 6.5.1 (WIP) 2024-10-14 11:07:12 +08:00
Zoe Gidiere 053ec39b7b Merge branch 'master' into ver/6.6.0 2024-10-13 16:32:26 -06:00
Zoe Gidiere 0a952cff4c bump build number 2024-10-13 16:06:35 -06:00
Zoe Gidiere 12faae8fd5 Use reflection remapper for worldGenContext on bukkit
How this even worked before astounds me
2024-10-13 15:55:29 -06:00
daoge_cmd 1496f2c929 build: update jitpack repo link 2024-10-13 15:41:03 +08:00
Zoe Gidiere 40a938be19 Merge branch 'ver/6.6.0' into dev/biomes3 2024-10-12 15:44:19 -06:00
Zoe Gidiere dc6cfb4187 Merge branch 'ver/6.6.0' into dev/7.0-2 2024-10-12 15:43:58 -06:00
Zoe Gidiere 4be2390294 Small cache fix 2024-10-12 15:43:23 -06:00
Zoe Gidiere cd2421bb49 Merge branch 'ver/6.6.0' into dev/7.0-2 2024-10-12 15:42:47 -06:00
Zoe Gidiere da16f65ea2 Merge branch 'ver/6.6.0' into dev/biomes3 2024-10-12 15:39:03 -06:00
Zoe Gidiere 65d026a130 Fix Cache Deadlock 2024-10-12 15:38:51 -06:00
Zoe Gidiere d45256b2f7 Another merge fixup 2024-10-12 14:52:11 -06:00
Zoe Gidiere 16d8e8f29d Fix up merge 2024-10-12 14:49:53 -06:00
Zoe Gidiere a58b2a5193 Merge remote-tracking branch 'origin/dev/biome2' into ver/6.6.0 2024-10-12 14:40:33 -06:00
Zoe Gidiere 1e5a1e20c2 Merge remote-tracking branch 'origin/master' into ver/6.6.0 2024-10-12 14:29:42 -06:00
Zoë Gidiere 592788450c Update CODEOWNERS 2024-10-12 13:45:55 -06:00
Zoë Gidiere 060cbfd0c4 Update CODEOWNERS 2024-10-12 13:44:02 -06:00
Zoe Gidiere b9c2f4e63b Update Licence year 2024-10-12 02:03:43 -06:00
Zoe Gidiere 87674aa0ba fix cellular sampler 2024-10-12 02:02:28 -06:00
Zoe Gidiere 40ccf80c7f Optimization when Terra Profiler is not running
Do not set Profiler SAFE Threadlocal var when profiler is not running but ensure it is set to false after the profiler stops to ensure consistent behavior
2024-10-12 00:58:08 -06:00
Zoe Gidiere 6946755e31 Minor Cellular opt 2024-10-12 00:56:37 -06:00
Zoë Gidiere 3b9962662e Merge pull request #471 from PolyhedralDev/dev/caching
Dev/caching
2024-10-12 00:22:43 -06:00
Zoe Gidiere 7ca61f82b2 Some API clean up 2024-10-12 00:22:18 -06:00
Zoe Gidiere 6851999926 Some refactoring 2024-10-11 19:45:12 -06:00
Zoe Gidiere 585967157d 1.21.2-pre3 2024-10-11 18:40:59 -06:00
Zoe Gidiere 305255511d More cache improvements 2024-10-11 18:27:37 -06:00
Zoe Gidiere 819be16d83 Merge branch 'dev/cli' into dev/caching 2024-10-11 16:40:26 -06:00
Zoe Gidiere 8a028b193a Add no save option 2024-10-11 16:35:26 -06:00
Zoe Gidiere d31679e6be remove stuff from example 2024-10-11 16:06:40 -06:00
Zoe Gidiere 9d328b12b3 More cache improvements 2024-10-11 16:06:23 -06:00
Zoe Gidiere a743e9c015 Merge branch 'dev/cli' into dev/caching 2024-10-11 15:16:20 -06:00
Zoe Gidiere 43d52e4bc1 CLI Improvements 2024-10-11 15:16:04 -06:00
Zoe Gidiere accc07fa07 Bump Version 2024-10-11 15:15:38 -06:00
Zoe Gidiere c1d3155ddd Cache Improvements 2024-10-11 15:15:10 -06:00
Zoe Gidiere 9a01a6c6a0 more WIP on cache 2024-10-11 00:20:46 -06:00
Zoe Gidiere 3033fbbf29 Fix a ton of fabric impl bugs 2024-10-10 16:49:40 -06:00
Zoe Gidiere c78a984a11 Update to pre2 2024-10-10 14:02:53 -06:00
Zoe Gidiere 1ae0d1f867 WIP Caching Hints and Caching Sampler 2024-10-09 23:36:12 -06:00
Zoe Gidiere be7e10c30c Fix runtime errors 2024-10-09 16:41:04 -06:00
Zoe Gidiere 2ccf8a8805 1.21.2-pre1 builds 2024-10-09 16:18:47 -06:00
Zoe Gidiere 197cb12be2 Update fabric versions to 1.21.2-pre1 2024-10-09 15:28:52 -06:00
Zoe Gidiere adb43dcaa8 Gradle update 2024-10-09 15:17:09 -06:00
Zoe Gidiere b03d128913 Addon dependency updates 2024-10-09 14:01:24 -06:00
Zoe Gidiere 725fa88466 Remap fabric 2024-10-09 14:01:12 -06:00
Zoe Gidiere a82dcd579c Merge branch 'ver/6.6.0' into dev/7.0-2 2024-10-09 13:02:07 -06:00
Zoe Gidiere 370b2e0122 Fix import 2024-10-09 13:01:54 -06:00
Zoe Gidiere 331075e54d Refractor name 2024-10-09 12:59:19 -06:00
Zoe Gidiere a20d2c1f60 Merge branch 'ver/6.6.0' into dev/7.0-2 2024-10-09 12:53:46 -06:00
Zoë Gidiere 973590f5fd Add parameter to turn off salting cellular lookup
another updated astrash commit
2024-10-09 12:42:24 -06:00
Astrash 1a5ab6b505 Add meta annotations 2024-10-09 12:42:13 -06:00
Astrash 14732328cd Add default 'from' values for linear map template 2024-10-09 12:41:55 -06:00
Zoë Gidiere 6c7974c302 Implement linear map normalizer
Updated astrash commit
2024-10-09 12:41:40 -06:00
Zoe Gidiere 1204b7a8c1 ArithmeticSampler Derivatives 2024-10-09 12:37:50 -06:00
Astrash fbe1c76e26 Forgot to include 4th derivative array index for 3D FBM 2024-10-09 21:50:08 +11:00
Astrash add7803e65 Simplify isDifferentiable static method impl 2024-10-09 20:56:37 +11:00
Astrash 4393a16b2f Use proper static isDifferentiable method 2024-10-09 20:56:11 +11:00
Astrash b4fa635455 Ensure throw with incorrect use of SimplexStyle derivatives
This should ensure that in the case an implementation fails to correctly
check isDifferentiable then performs a subsequent derivative based sample,
an error is thrown, rather than potentially missing a logic bug due to
noise of 0 and derivative of 0 being returned which could otherwise be
hard to narrow down.
2024-10-09 20:45:25 +11:00
Astrash 9f425c6159 Add support for derivatives in FBM 2024-10-09 20:39:45 +11:00
Astrash 158ffba2a5 Make FractalNoiseFunction impls support derivatives 2024-10-09 20:39:13 +11:00
Zoe Gidiere f5f3725dba Addon dependency updates 2024-09-25 15:47:19 -06:00
Zoe Gidiere a7a7354c40 remove 7.0 todo 2024-09-24 23:30:04 -06:00
Zoe Gidiere 42dcc9d9bd Merge remote-tracking branch 'origin/master' into dev/7.0-2 2024-09-24 23:29:52 -06:00
Zoë Gidiere b7326c0ff6 Merge pull request #469 from PolyhedralDev/dev/fix-bukkit-spawner
fix spawners on bukkit
2024-09-24 23:27:44 -06:00
Zoe Gidiere f70a83aec3 fix spawners on bukkit 2024-09-24 23:26:49 -06:00
astrsh 589cf83c38 Flip comparison
As per request from @duplexsystem
2024-09-25 14:08:19 +10:00
Zoe Gidiere 581651e83b reformat 2024-09-24 10:06:57 -06:00
Zoe Gidiere a95a1284a4 reformat 2024-09-24 09:54:53 -06:00
Zoe Gidiere c95b3c09a8 Merge branch 'ver/6.5.0' into dev/7.0-2 2024-09-24 09:44:35 -06:00
Zoë Gidiere c374c2d5ef Merge pull request #467 from PolyhedralDev/ver/6.5.0
Ver/6.5.0
2024-09-24 09:41:58 -06:00
Zoe Gidiere 13782bb51e Remforamt 2024-09-24 09:11:43 -06:00
Zoe Gidiere 1aa3ef813c add default sampler to pseudoerosion 2024-09-24 09:05:33 -06:00
Zoe Gidiere 6cc53beecb Fix Sin/Cos 2024-09-23 23:14:35 -06:00
Zoe Gidiere 2c45ba91aa Fix up commit 2024-09-23 22:40:37 -06:00
Zoe Gidiere 6244ffca63 Revert "Sin/Cos Opts"
This reverts commit 1d05f95f74.
2024-09-23 22:38:45 -06:00
Zoe Gidiere 59d943b3ea Revert "Fix build"
This reverts commit 10d723372d.
2024-09-23 22:38:17 -06:00
Zoe Gidiere f605ee1937 Remove Final from psuedoerosion template 2024-09-23 22:35:01 -06:00
Zoe Gidiere f87b7c07d9 Reformat 2024-09-23 22:27:53 -06:00
Zoe Gidiere f1124aae6b Update platform mod file versions and authors 2024-09-23 21:18:47 -06:00
Zoe Gidiere 9c8298fe53 convert pseudoerosion to double 2024-09-23 21:09:19 -06:00
Zoe Gidiere d69b0dba90 reformat 2 2024-09-23 21:06:07 -06:00
Zoe Gidiere 42166d5239 bump version number 2024-09-23 20:59:02 -06:00
Zoe Gidiere d6772f51ea Reformat 2024-09-23 20:56:13 -06:00
Zoe Gidiere f469193909 Make seed affect pseudoerosion hasing 2024-09-23 20:51:00 -06:00
Zoe Gidiere 10d723372d Fix build 2024-09-23 20:45:47 -06:00
Zoe Gidiere 1d05f95f74 Sin/Cos Opts 2024-09-23 20:38:22 -06:00
Zoe Gidiere bd73427072 OpenSimplex 2 Derivative Impl 2024-09-23 20:29:41 -06:00
Zoe Gidiere 017b4608bc Fix build 2024-09-23 19:49:16 -06:00
Zoe Gidiere 5f340f8ffd slight open simplex 2s op\pt 2024-09-23 19:48:22 -06:00
Zoe Gidiere 5b35eb041b Remove temp DerivativeFractl nose 2024-09-23 19:43:56 -06:00
Zoe Gidiere 699d5d1d62 Derivable OpenSimplex2S Impl
baased on https://gist.github.com/KdotJPG/882f36b2ae5ae56a8fc91627ec1c87f4
2024-09-23 19:42:50 -06:00
Zoe Gidiere 07e3d0058d Refractor PseudoErosion 2024-09-23 16:46:48 -06:00
Zoe Gidiere b1ad820e1c Move pseudoerosion to NoiseFunction 2024-09-23 16:37:42 -06:00
Zoe Gidiere 3644ee7fca Implement DerivateNoiseFunction 2024-09-23 16:28:34 -06:00
Zoe Gidiere 2df2755631 small opt 2024-09-21 17:20:28 -06:00
Zoe Gidiere ddb131d413 Merge remote-tracking branch 'origin/ver/6.5.0' into dev/7.0-2 2024-09-20 16:42:39 -06:00
daoge_cmd 6042f1c036 build: update build.gradle.kts 2024-09-21 00:57:18 +08:00
daoge_cmd af2ac64cd4 feat: using the new safe getter api 2024-09-20 19:47:49 +08:00
daoge_cmd 4bad8f702c docs: format javadoc 2024-09-18 13:02:16 +08:00
daoge_cmd 76f12e0cb8 build: prepare for merging 2024-09-18 12:59:30 +08:00
Zoe Gidiere 2e145ccd0a Merge branch 'ver/6.5.0' into dev/7.0-2 2024-09-17 22:10:23 -06:00
Zoe Gidiere 0731d781d5 fix-up 2024-09-17 17:54:19 -06:00
Zoe Gidiere 5bc73dec37 Merge branch 'ver/6.5.0' into dev/7.0-2 2024-09-17 17:46:33 -06:00
daoge_cmd ce9fb53df4 build: disable useless modules 2024-09-17 22:28:04 +08:00
daoge 1f01b99d29 ci: should check allay branch 2024-09-17 20:40:24 +08:00
daoge 18a24562ec ci: upload jar 2024-09-17 20:39:49 +08:00
daoge 2f2d43e1b8 build: disable mixin platform 2024-09-17 20:00:42 +08:00
daoge 6c8a7da254 build: disable mixin platform 2024-09-17 19:59:43 +08:00
daoge ca4461ba2a build: disable bukkit platform 2024-09-17 19:56:45 +08:00
daoge c6df3c302b build: disable fabric platform 2024-09-17 19:56:03 +08:00
daoge 328ebf5aa9 build: disable cli platform 2024-09-17 19:55:20 +08:00
daoge 2c476a25d9 build: fix build for allay platform 2024-09-17 19:45:26 +08:00
daoge b432a4e01d build: use jdk21 for allay platform 2024-09-17 19:39:01 +08:00
daoge f73eadda76 ci: use jdk 21 2024-09-17 19:18:08 +08:00
daoge 1acdad5c6b ci: run github action when pushing 2024-09-17 19:01:41 +08:00
daoge 732a894945 ci: trigger github action 2024-09-17 18:59:53 +08:00
daoge_cmd bbf0915bc9 build: use org.allaymc.allay as the group id 2024-09-07 19:47:19 +08:00
daoge_cmd 5f70ecb943 feat: use jitpack 2024-09-04 23:55:24 +08:00
daoge_cmd 2e709dace6 feat: sync allay 2024-08-27 19:15:42 +08:00
daoge_cmd c97f25cb95 feat: support 1.21.20 and newer versions 2024-08-23 20:18:45 +08:00
daoge_cmd 28c689d16f feat: fetch allay's changes 2024-08-19 01:36:32 +08:00
daoge_cmd a34946cece feat: return air if block type not found 2024-08-18 19:39:23 +08:00
daoge_cmd 4acd0de6fa feat: fetch allay's changes 2024-07-24 20:30:24 +08:00
daoge_cmd 2443fff0a4 feat: fetch allay's changes 2024-07-17 01:32:01 +08:00
daoge_cmd cd767a648c feat: fetch allay's changes 2024-07-17 01:27:56 +08:00
daoge_cmd d490324bfc feat: support waterlogged 2024-06-19 18:09:31 +08:00
daoge_cmd 5fa7007d45 fix: fix a typo 2024-06-19 17:19:17 +08:00
daoge_cmd 2d0e4a83b0 fix: OtherChunkAccessibleContext.get/setBlockState() should use level pos instead of chunk local pos 2024-06-19 01:05:37 +08:00
daoge_cmd e68f928e38 feat: use OtherChunkAccessibleContext directly 2024-06-18 14:59:42 +08:00
daoge_cmd 4a3678cea9 feat: update to 1.21 2024-06-18 03:41:17 +08:00
daoge_cmd 6ff0903d83 fix: fix an mistake 2024-06-17 01:21:14 +08:00
daoge_cmd 133df45968 feat: make it works! 2024-06-17 00:37:16 +08:00
daoge_cmd 1f937a2ae0 feat: fake entity 2024-06-16 15:55:28 +08:00
daoge_cmd d861d3e849 feat: more works 2024-06-16 15:48:18 +08:00
daoge_cmd 3d4aec4abb chores: improve imports 2024-06-16 15:03:19 +08:00
daoge_cmd 62e589870d feat: more works 2024-06-16 15:02:42 +08:00
daoge_cmd 2b125414c9 feat: more works 2024-06-16 06:01:38 +08:00
daoge_cmd 59d7632927 feat: add mapping files 2024-06-16 03:30:50 +08:00
daoge_cmd d81f886e8c feat: more works 2024-06-16 03:29:03 +08:00
daoge_cmd b29ba2db70 feat: more works 2024-06-16 01:33:46 +08:00
daoge_cmd 02a7363f01 feat: init work on allay 2024-06-16 00:07:52 +08:00
duplexsystem b848ddabda Merge remote-tracking branch 'origin/ver/6.5.0' into dev/7.0-2 2024-03-02 22:18:54 -07:00
Zoë Gidiere 7214053b9e update fabric loader 2024-01-07 11:57:17 -07:00
Zoë Gidiere da5d0c52f2 Merge remote-tracking branch 'origin/ver/6.5.0' into dev/7.0-2 2024-01-07 10:55:39 -07:00
Zoë Gidiere cd69c7e77d bump version 2024-01-05 19:49:20 -07:00
Zoë Gidiere 56dd15c9aa clean up flora injection and make it configurable, off by default 2024-01-05 19:44:31 -07:00
Zoë Gidiere 2f470a3720 addon dep 2024-01-05 18:52:10 -07:00
Zoë Gidiere 5350917412 refactor v2 addons 2024-01-05 18:36:01 -07:00
Zoë Gidiere 45528acac8 update v2 addon tag 2024-01-05 18:34:55 -07:00
Zoë Gidiere 921212ccb5 Remove dump-resources and allow for ignoring specific resources 2024-01-05 17:19:27 -07:00
Zoë Gidiere 37641d43d6 Merge remote-tracking branch 'origin/ver/6.5.0' into dev/7.0-2 2024-01-05 15:14:23 -07:00
Zoë Gidiere 87ea5ce9e7 remove translation logic 2024-01-05 15:12:35 -07:00
Zoë Gidiere 77f766b8bb remove image and pipeline v1 2024-01-05 15:10:19 -07:00
Zoë Gidiere ecbba57b0a fix enum to uppcases 2024-01-05 15:01:36 -07:00
Zoë Gidiere 839835afd7 Add parameter to turn off salting cellular lookup
another updated astrash commit
2024-01-05 15:00:27 -07:00
Astrash 56941c237c Add meta annotations 2024-01-05 14:58:34 -07:00
Astrash 179a304cd2 Add default 'from' values for linear map template 2024-01-05 14:58:23 -07:00
Zoë Gidiere 4970bf5720 Implement linear map normalizer
Updated astrash commit
2024-01-05 14:58:07 -07:00
Zoë Gidiere f877f861cf use Ranges 2024-01-05 14:47:26 -07:00
Zoë Gidiere d5f0b69bc7 UX tweaks to biome config 2024-01-05 14:46:01 -07:00
Zoë Gidiere b10fd84e00 Merge remote-tracking branch 'origin/ver/6.5.0' into dev/metapacks 2024-01-05 09:11:42 -07:00
Zoë 3e04bae828 Merge branch 'ver/6.5.0' into dev/metapacks 2023-12-24 22:39:15 -06:00
Zoë 82334cfe9e Merge branch 'ver/6.5.0' into dev/metapacks 2023-12-22 15:03:04 -06:00
Zoë Gidiere 50ba1c6eab push changes 2023-12-21 08:47:52 -07:00
Zoë Gidiere 27a967f3a6 fix build 2023-12-12 20:17:15 -07:00
Zoë Gidiere 4c71355535 Reformat 2023-12-12 19:07:57 -07:00
Zoë Gidiere e83b70b5ae generation settings 2023-12-12 18:52:31 -07:00
Zoë Gidiere 56b428d501 refactor 2023-12-12 17:19:32 -07:00
Zoë Gidiere 7ca24faad3 fix loading 2023-12-12 17:15:54 -07:00
Zoë Gidiere 9d200565d7 more fixes 2023-12-12 16:54:27 -07:00
Zoë Gidiere f6c2795eaf remove debug loging 2023-12-12 16:12:36 -07:00
Zoë Gidiere 6f03746e41 another fix 2023-12-12 16:09:08 -07:00
Zoë Gidiere 47c8cb3168 Fix up random changes 2023-12-12 16:00:56 -07:00
Zoë Gidiere a9f973cae9 WIP Random Changes 2023-12-12 15:57:04 -07:00
Zoë Gidiere 033181d7c8 more wip changes 2023-12-12 15:48:31 -07:00
Zoë Gidiere e11a235386 WIP Dim opts 2023-12-12 13:55:03 -07:00
Zoë Gidiere db1e924246 more metapack work 2023-12-12 13:35:52 -07:00
Zoë Gidiere c86faa44ec Remove netherfossiloptimization because it's no longer applicable
also it's not needed mc seems to have done this themselves
2023-12-12 13:35:24 -07:00
Zoë Gidiere de91a6facb metapack linking instead of shading 2023-12-11 23:36:05 -07:00
Zoë Gidiere d4a328eb38 who let the datadrive (the dimensions) 2023-12-11 21:14:43 -07:00
Zoë Gidiere b039629b2d WIP meta pack system 2023-12-11 16:25:13 -07:00
Zoë Gidiere d48fa96ec7 opt import 2023-12-11 14:56:07 -07:00
Zoë Gidiere 8dd1f49b88 Merge remote-tracking branch 'origin/dev/remove-loader' into dev/metapacks 2023-12-11 14:54:59 -07:00
Zoë Gidiere 81528915a8 Merge branch 'ver/6.5.0' into dev/metapacks 2023-12-11 14:54:44 -07:00
Zoë Gidiere 5979254808 wip 2023-12-11 14:54:27 -07:00
Astrash c0aaf6c6e8 Add messages to exceptions 2023-11-28 10:36:30 +11:00
Astrash 1ab3233cba Reformat code 2023-11-25 15:14:16 +11:00
Astrash 59ea5a69d8 Refactor pack loading
- Combine initial load and reload logic together between each platform implementation
- Should prevent pack load errors from blocking other packs from loading.
2023-11-25 15:10:43 +11:00
Astrash 4ba71e9c27 packDirectory -> rootPath 2023-11-25 15:07:45 +11:00
Astrash 5c7441241c Replace Loader with java.nio.files 2023-11-25 13:31:42 +11:00
Zoë Gidiere 0efb0916e6 Initial Bukkit Biome Config 2023-11-17 16:16:18 -07:00
Zoë Gidiere 82fbf796da Refractor BiomeUtil 2023-11-17 15:26:53 -07:00
Zoë Gidiere 94bf67d09d fix dev env by having fabric api at runtime 2023-11-17 14:57:14 -07:00
Zoë Gidiere f86d4bae32 remove old bukkit versions 2023-11-17 13:22:10 -07:00
Zoë Gidiere c7cecaebe6 Merge remote-tracking branch 'origin/dev/biome2' into ver/6.5.0 2023-11-17 13:21:39 -07:00
Zoë Gidiere 70b1c3bbf3 warning 2023-09-30 12:06:21 -06:00
Zoë Gidiere e9b145b6c3 unbreaking via deprecation 2023-09-30 11:50:15 -06:00
Zoë 99d848b394 UX tweaks to biome config 2023-09-30 11:42:05 -06:00
Zoë Gidiere 4828d51da4 Merge branch 'dev/physics' into dev/biome2 2023-09-30 11:38:18 -06:00
867 changed files with 11265 additions and 10155 deletions
+4 -3
View File
@@ -1,13 +1,14 @@
# Global owners, automatically request review when pull request is submitted
* @dfsek @solonovamax @duplexsystem @Astrashh @justaureus
* @dfsek @solonovamax @duplexsystem @astrsh @justaureus
# Platforms
/platforms/ @dfsek @solonovamax @duplexsystem @justaureus
/platforms/bukkit @dfsek @solonovamax @duplexsystem @justaureus @OakLoaf
# Common
/common/ @dfsek @solonovamax @duplexsystem @Astrashh
/common/ @dfsek @solonovamax @duplexsystem @astrsh
# Gradle Stuff
/buildSrc/ @dfsek @solonovamax @duplexsystem
*.gradle.kts @dfsek @solonovamax @duplexsystem
/gradle/ @dfsek @solonovamax @duplexsystem
/gradle/ @dfsek @solonovamax @duplexsystem
+2 -1
View File
@@ -44,6 +44,7 @@ You must put an x in all the boxes that it applies to. (Like this: [x])
<!-- There is an included `.editorconfig` file in the base of the repo. Please use a plugin for your IDE of choice that follows those settings. -->
- [ ] I have read the [`CONTRIBUTING.md`](https://github.com/PolyhedralDev/Terra/blob/master/CONTRIBUTING.md)
document in the root of the git repository.
- [ ] LLM-based tools were not used to create this PR. (ChatGPT, Claude, etc)
#### Types of changes
@@ -98,7 +99,7 @@ You must put an x in all the boxes that it applies to. (Like this: [x])
- [ ] I am not the original author of this code, but it is in public domain or
released under [GPLv3](https://www.gnu.org/licenses/gpl-3.0.en.html) or a compatible license.
<!--
Please provide reliable evidence of this.
Please provide reliable evidence of this. LLM-generated code does not satisfy this requirement.
NOTE: for compatible licenses, you must make sure to add the included license somewhere in the program, if so required.
(And even if it's not required, it's still nice to do it. Also add attribution somewhere.)
-->
+4 -4
View File
@@ -17,16 +17,16 @@ jobs:
contents: read
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
- uses: actions/checkout@v4.2.2
- name: Set up JDK 21
uses: actions/setup-java@387ac29b308b003ca37ba93a6cab5eb57c8f5f93
uses: actions/setup-java@v4.7.1
with:
java-version: '21'
distribution: 'temurin'
server-id: github # Value of the distributionManagement/repository/id field of the pom.xml
settings-path: ${{ github.workspace }} # location for the settings.xml file
- uses: burrunan/gradle-cache-action@03c71a8ba93d670980695505f48f49daf43704a6
- uses: burrunan/gradle-cache-action@v3.0.1
name: Build Terra
with:
# Specifies arguments for Gradle execution
@@ -44,4 +44,4 @@ jobs:
# Properties are passed as -Pname=value
properties: |
kotlin.js.compiler=ir
kotlin.parallel.tasks.in.project=true
kotlin.parallel.tasks.in.project=true
+5 -2
View File
@@ -258,6 +258,9 @@ as [GitHub Pull Requests](https://guides.github.com/activities/forking/#making-a
see instead** and why.
- **Explain why this enhancement would be useful** to most Terra users and isn't
something that can or should be implemented as an addon.
- **Do not use LLM/"AI" tools to create your pull request.** Your pr should be written
by you. Using an LLM to automate small, tedious tasks (regex and other fiddly things like it)
is acceptable, but submitting a low-effort, completely LLM-generated PR will result in a ban.
## Styleguides
@@ -381,7 +384,7 @@ compatibilities are welcome and encouraged, in the form of addons.**
### Platform-Agnostic Design
Terra must, at all times, remain platform agnostic. This means it must be able
Terra must, at all times, remain platform-agnostic. This means it must be able
to run on theoretically any voxel based platform. Including non-minecraft games
like Terasology.
@@ -391,7 +394,7 @@ it'll be running on.
Examples:
- Don't assume the world height is 256.
- Don't assume that a specific block, item, or entity exists. (Eg. don't assume
- Don't assume that a specific block, item, or entity exists. (E.g. don't assume
there exists a block called `minecraft:grass_block`)
### Data-Driven
Vendored
+149
View File
@@ -0,0 +1,149 @@
pipeline {
agent any
tools {
jdk "Temurin Java 21"
}
triggers {
githubPush()
}
environment {
DISCORD_WEBHOOK_URL = credentials('polydev-discord-webhook-url')
}
stages {
stage('Checkout') {
steps {
scmSkip(deleteBuild: true)
}
}
stage('Setup Gradle') {
steps {
sh 'chmod +x gradlew'
}
}
stage('Build') {
steps {
withGradle {
sh './gradlew build --rerun-tasks -x check'
sh './gradlew javadoc'
}
}
post {
success {
archiveArtifacts artifacts: 'platforms/fabric/build/libs/Terra-fabric*.jar,platforms/bukkit/build/libs/Terra-bukkit*-shaded.jar,platforms/allay/build/libs/Terra-allay*.jar,platforms/minestom/build/libs/Terra-minestom*.jar', fingerprint: true, onlyIfSuccessful: true
javadoc javadocDir: 'common/api/build/docs/javadoc', keepAll: true
}
}
}
stage('Tests') {
steps {
withGradle {
sh './gradlew test --rerun-tasks'
}
}
}
// stage('Deploy to snapshots repositories') {
// when {
// allOf {
// not { buildingTag() }
// not { expression { env.TAG_NAME != null && env.TAG_NAME.matches('v\\d+\\.\\d+\\.\\d+') } }
// }
// }
//
// steps {
// withCredentials([
// string(credentialsId: 'maven-signing-key', variable: 'ORG_GRADLE_PROJECT_signingKey'),
// string(credentialsId: 'maven-signing-key-password', variable: 'ORG_GRADLE_PROJECT_signingPassword'),
// usernamePassword(
// credentialsId: 'solo-studios-maven',
// passwordVariable: 'ORG_GRADLE_PROJECT_SoloStudiosSnapshotsPassword',
// usernameVariable: 'ORG_GRADLE_PROJECT_SoloStudiosSnapshotsUsername'
// )
// ]) {
// withGradle {
// sh './gradlew publishAllPublicationsToSoloStudiosSnapshotsRepository'
// }
// }
// }
// }
stage('Deploy to releases repositories') {
// when {
// allOf {
// buildingTag()
// expression { env.TAG_NAME != null && env.TAG_NAME.matches('v\\d+\\.\\d+\\.\\d+') }
// }
// }
steps {
withCredentials([
string(credentialsId: 'maven-signing-key', variable: 'ORG_GRADLE_PROJECT_signingKey'),
string(credentialsId: 'maven-signing-key-password', variable: 'ORG_GRADLE_PROJECT_signingPassword'),
usernamePassword(
credentialsId: 'solo-studios-maven',
passwordVariable: 'ORG_GRADLE_PROJECT_SoloStudiosReleasesPassword',
usernameVariable: 'ORG_GRADLE_PROJECT_SoloStudiosReleasesUsername'
),
// TODO: does not yet exist (uncomment once added)
// usernamePassword(
// credentialsId: 'sonatype-maven-credentials',
// passwordVariable: 'ORG_GRADLE_PROJECT_SonatypePassword',
// usernameVariable: 'ORG_GRADLE_PROJECT_SonatypeUsername'
// ),
// usernamePassword(
// credentialsId: 'codemc-maven-credentials',
// passwordVariable: 'ORG_GRADLE_PROJECT_CodeMCPassword',
// usernameVariable: 'ORG_GRADLE_PROJECT_CodeMCUsername'
// )
]) {
withGradle {
sh './gradlew publish'
//sh './gradlew publishAllPublicationsToSoloStudiosReleasesRepository'
// sh './gradlew publishAllPublicationsToSonatypeRepository'
// sh './gradlew publishAllPublicationsToCodeMCRepository'
}
}
}
}
}
post {
always {
discoverReferenceBuild()
// junit testResults: '**/build/test-results/*/TEST-*.xml'
recordIssues(
aggregatingResults: true,
enabledForFailure: true,
minimumSeverity: 'ERROR',
sourceCodeEncoding: 'UTF-8',
checksAnnotationScope: 'ALL',
sourceCodeRetention: 'LAST_BUILD',
tools: [java(), javaDoc()]
)
discordSend(
title: env.JOB_NAME + ' ' + env.BUILD_DISPLAY_NAME,
showChangeset: true,
enableArtifactsList: true,
link: env.BUILD_URL,
result: currentBuild.currentResult,
customAvatarUrl: 'https://github.com/PolyhedralDev.png',
customUsername: 'Solo Studios Jenkins',
webhookURL: env.DISCORD_WEBHOOK_URL,
)
cleanWs()
}
}
}
+1 -1
View File
@@ -1,6 +1,6 @@
MIT License
Copyright (c) 2020-2023 Polyhedral Development
Copyright (c) 2020-2025 Polyhedral Development
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
+4 -3
View File
@@ -1,8 +1,8 @@
preRelease(true)
versionProjects(":common:api", version("6.5.0"))
versionProjects(":common:implementation", version("6.5.0"))
versionProjects(":platforms", version("6.5.0"))
versionProjects(":common:api", version("7.0.0"))
versionProjects(":common:implementation", version("7.0.0"))
versionProjects(":platforms", version("7.0.0"))
allprojects {
@@ -44,6 +44,7 @@ afterEvaluate {
configureDistribution()
}
project(":platforms:bukkit:common").configureDistribution()
project(":platforms:minestom:example").configureDistribution()
forSubProjects(":common:addons") {
apply(plugin = "com.gradleup.shadow")
+12 -6
View File
@@ -6,6 +6,12 @@ plugins {
repositories {
mavenCentral()
gradlePluginPortal()
maven("https://maven.solo-studios.ca/releases") {
name = "Solo Studios"
}
maven("https://maven.solo-studios.ca/snapshots") {
name = "Solo Studios"
}
maven("https://repo.codemc.org/repository/maven-public") {
name = "CodeMC"
}
@@ -16,11 +22,11 @@ repositories {
dependencies {
//TODO Allow pulling from Versions.kt
implementation("com.gradleup.shadow", "shadow-gradle-plugin", "8.3.1")
implementation("io.papermc.paperweight.userdev", "io.papermc.paperweight.userdev.gradle.plugin", "1.7.2")
implementation("com.gradleup.shadow", "shadow-gradle-plugin", "8.3.9")
implementation("org.ow2.asm", "asm", "9.7")
implementation("org.ow2.asm", "asm-tree", "9.7")
implementation("com.dfsek.tectonic", "common", "4.2.1")
implementation("org.yaml", "snakeyaml", "2.3")
implementation("io.papermc.paperweight.userdev", "io.papermc.paperweight.userdev.gradle.plugin", "2.0.0-beta.18")
implementation("org.ow2.asm", "asm", "9.9")
implementation("org.ow2.asm", "asm-tree", "9.9")
implementation("com.dfsek.tectonic", "common", "4.3.1")
implementation("org.yaml", "snakeyaml", "2.5")
}
@@ -13,6 +13,7 @@ import org.gradle.kotlin.dsl.getByName
import org.gradle.kotlin.dsl.register
import org.gradle.kotlin.dsl.withType
import org.gradle.language.jvm.tasks.ProcessResources
import org.gradle.plugins.ide.idea.model.IdeaModel
fun Project.configureCompilation() {
apply(plugin = "maven-publish")
@@ -21,6 +22,13 @@ fun Project.configureCompilation() {
apply(plugin = "idea")
apply<TectonicDocPlugin>()
configure<IdeaModel> {
module {
isDownloadJavadoc = true
isDownloadSources = true
}
}
configure<JavaPluginExtension> {
sourceCompatibility = JavaVersion.VERSION_21
targetCompatibility = JavaVersion.VERSION_21
+11 -2
View File
@@ -30,6 +30,12 @@ fun Project.configureDependencies() {
repositories {
mavenCentral()
gradlePluginPortal()
maven("https://maven.solo-studios.ca/releases") {
name = "Solo Studios"
}
maven("https://maven.solo-studios.ca/snapshots") {
name = "Solo Studios"
}
maven("https://maven.fabricmc.net/") {
name = "FabricMC"
}
@@ -51,11 +57,14 @@ fun Project.configureDependencies() {
maven("https://s01.oss.sonatype.org/content/repositories/snapshots/") {
name = "Sonatype Snapshots"
}
maven("https://repo.onarandombox.com/multiverse-releases") {
name = "onarandombox"
}
}
dependencies {
testImplementation("org.junit.jupiter", "junit-jupiter-api", Versions.Libraries.Internal.junit)
testImplementation("org.junit.jupiter", "junit-jupiter-engine", Versions.Libraries.Internal.junit)
testImplementation("org.junit.jupiter", "junit-jupiter", Versions.Libraries.Internal.junit)
"testRuntimeOnly"("org.junit.platform", "junit-platform-launcher")
compileOnly("org.jetbrains", "annotations", Versions.Libraries.Internal.jetBrainsAnnotations)
compileOnly("com.google.guava", "guava", Versions.Libraries.Internal.guava)
+59 -26
View File
@@ -4,9 +4,11 @@ import java.io.File
import java.io.FileWriter
import java.net.URL
import java.nio.file.FileSystems
import java.nio.file.Path
import org.gradle.api.DefaultTask
import org.gradle.api.Project
import org.gradle.api.plugins.BasePluginExtension
import org.gradle.jvm.tasks.Jar
import org.gradle.kotlin.dsl.apply
import org.gradle.kotlin.dsl.configure
import org.gradle.kotlin.dsl.extra
@@ -19,6 +21,25 @@ import kotlin.io.path.createDirectories
import kotlin.io.path.createFile
import kotlin.io.path.exists
private fun Project.installAddonsInto(dest: Path) {
FileSystems.newFileSystem(dest, mapOf("create" to "false"), null).use { fs ->
forSubProjects(":common:addons") {
val jar = getJarTask()
logger.info("Packaging addon ${jar.archiveFileName.get()} to $dest. size: ${jar.archiveFile.get().asFile.length() / 1024}KB")
val boot = if (extra.has("bootstrap") && extra.get("bootstrap") as Boolean) "bootstrap/" else ""
val addonPath = fs.getPath("/addons/$boot${jar.archiveFileName.get()}")
if (!addonPath.exists()) {
addonPath.parent.createDirectories()
addonPath.createFile()
jar.archiveFile.get().asFile.toPath().copyTo(addonPath, overwrite = true)
}
}
}
}
fun Project.configureDistribution() {
apply(plugin = "com.gradleup.shadow")
@@ -26,10 +47,23 @@ fun Project.configureDistribution() {
val downloadDefaultPacks = tasks.create("downloadDefaultPacks") {
group = "terra"
doFirst {
file("${buildDir}/resources/main/packs/").deleteRecursively()
val defaultPackUrl =
URL("https://github.com/PolyhedralDev/TerraOverworldConfig/releases/download/" + Versions.Terra.overworldConfig + "/default.zip")
downloadPack(defaultPackUrl, project)
try {
file("${buildDir}/resources/main/packs/").deleteRecursively()
file("${buildDir}/resources/main/metapacks/").deleteRecursively()
val overworldPackUrl =
URL("https://github.com/PolyhedralDev/TerraOverworldConfig/releases/download/" + Versions.Terra.overworldConfig + "/Overworld.zip")
val reimagENDPackUrl =
URL("https://github.com/PolyhedralDev/ReimagEND/releases/download/" + Versions.Terra.reimagENDConfig + "/ReimagEND.zip")
val tartarusPackUrl =
URL("https://github.com/PolyhedralDev/Tartarus/releases/download/" + Versions.Terra.tartarusConfig + "/Tartarus.zip")
val defaultPackUrl =
URL("https://github.com/PolyhedralDev/DefaultMetapack/releases/download/" + Versions.Terra.defaultConfig + "/default.zip")
downloadPack(overworldPackUrl, project)
downloadPack(reimagENDPackUrl, project)
downloadPack(tartarusPackUrl, project)
downloadPack(defaultPackUrl, project, true)
} catch (_: Exception) {
}
}
}
@@ -48,25 +82,17 @@ fun Project.configureDistribution() {
doLast {
// https://github.com/johnrengelman/shadow/issues/111
val dest = tasks.named<ShadowJar>("shadowJar").get().archiveFile.get().path
FileSystems.newFileSystem(dest, mapOf("create" to "false"), null).use { fs ->
forSubProjects(":common:addons") {
val jar = getJarTask()
logger.info("Packaging addon ${jar.archiveFileName.get()} to $dest. size: ${jar.archiveFile.get().asFile.length() / 1024}KB")
val boot = if (extra.has("bootstrap") && extra.get("bootstrap") as Boolean) "bootstrap/" else ""
val addonPath = fs.getPath("/addons/$boot${jar.archiveFileName.get()}")
if (!addonPath.exists()) {
addonPath.parent.createDirectories()
addonPath.createFile()
jar.archiveFile.get().asFile.toPath().copyTo(addonPath, overwrite = true)
}
}
}
installAddonsInto(dest)
}
}
tasks.create("installAddonsIntoDefaultJar") {
group = "terra"
dependsOn(compileAddons)
doLast {
val dest = tasks.named<Jar>("jar").get().archiveFile.get().path
installAddonsInto(dest)
}
}
@@ -81,6 +107,13 @@ fun Project.configureDistribution() {
resources.computeIfAbsent("packs") { ArrayList() }.add(it.name)
}
val metaPacksDir = File("${project.buildDir}/resources/main/metapacks/")
metaPacksDir.walkTopDown().forEach {
if (it.isDirectory || !it.name.endsWith(".zip")) return@forEach
resources.computeIfAbsent("metapacks") { ArrayList() }.add(it.name)
}
val langDir = File("${project(":common:implementation").buildDir}/resources/main/lang/")
langDir.walkTopDown().forEach {
@@ -133,7 +166,6 @@ fun Project.configureDistribution() {
version = project.version
relocate("org.apache.commons", "com.dfsek.terra.lib.commons")
relocate("org.objectweb.asm", "com.dfsek.terra.lib.asm")
relocate("com.dfsek.paralithic", "com.dfsek.terra.lib.paralithic")
relocate("org.json", "com.dfsek.terra.lib.json")
relocate("org.yaml", "com.dfsek.terra.lib.yaml")
@@ -149,9 +181,10 @@ fun Project.configureDistribution() {
}
}
fun downloadPack(packUrl: URL, project: Project) {
fun downloadPack(packUrl: URL, project: Project, metapack: Boolean = false) {
val fileName = packUrl.file.substring(packUrl.file.lastIndexOf("/"))
val file = File("${project.buildDir}/resources/main/packs/${fileName}")
val resourceType = if (metapack) "metapacks" else "packs"
val file = File("${project.buildDir}/resources/main/${resourceType}/${fileName}")
file.parentFile.mkdirs()
file.outputStream().write(packUrl.readBytes())
}
+7 -6
View File
@@ -16,16 +16,17 @@ fun Project.configurePublishing() {
}
repositories {
val mavenUrl = "https://repo.codemc.io/repository/maven-releases/"
val mavenUrl = "https://maven.solo-studios.ca/releases/"
//val mavenSnapshotUrl = "https://repo.codemc.io/repository/maven-snapshots/"
maven(mavenUrl) {
val mavenUsername: String? by project
val mavenPassword: String? by project
if (mavenUsername != null && mavenPassword != null) {
val SoloStudiosReleasesUsername: String? by project
val SoloStudiosReleasesPassword: String? by project
if (SoloStudiosReleasesUsername != null && SoloStudiosReleasesPassword != null) {
credentials {
username = mavenUsername
password = mavenPassword
username = SoloStudiosReleasesUsername
password = SoloStudiosReleasesPassword
}
}
}
+53 -30
View File
@@ -1,35 +1,39 @@
object Versions {
object Terra {
const val overworldConfig = "v1.3.4"
const val overworldConfig = "latest"
const val reimagENDConfig = "latest"
const val tartarusConfig = "latest"
const val defaultConfig = "latest"
}
object Libraries {
const val tectonic = "4.2.1"
const val paralithic = "0.7.1"
const val tectonic = "4.3.1"
const val paralithic = "2.0.1"
const val strata = "1.3.2"
const val seismic = "2.5.7"
const val cloud = "2.0.0"
const val cloudPaper = "2.0.0-beta.10"
const val cloudFabric = "2.0.0-beta.9"
const val caffeine = "3.1.8"
const val caffeine = "3.2.2"
const val slf4j = "2.0.16"
const val slf4j = "2.0.17"
object Internal {
const val shadow = "8.3.1"
const val apacheText = "1.12.0"
const val apacheIO = "2.16.1"
const val guava = "33.3.0-jre"
const val asm = "9.7"
const val snakeYml = "2.3"
const val jetBrainsAnnotations = "24.1.0"
const val junit = "5.11.0"
const val shadow = "8.3.9"
const val apacheText = "1.14.0"
const val apacheIO = "2.20.0"
const val guava = "33.5.0-jre"
const val asm = "9.9"
const val snakeYml = "2.5"
const val jetBrainsAnnotations = "26.0.2-1"
const val junit = "6.0.0"
const val nbt = "6.1"
}
}
object Fabric {
const val fabricAPI = "0.104.0+${Mod.minecraft}"
const val fabricAPI = "0.134.1+${Mod.minecraft}"
const val cloud = "2.0.0-beta.13"
}
//
// object Quilt {
@@ -38,14 +42,16 @@ object Versions {
// }
object Mod {
const val mixin = "0.15.3+mixin.0.8.7"
const val mixin = "0.16.4+mixin.0.8.7"
const val mixinExtras = "0.5.0"
const val minecraft = "1.21.1"
const val yarn = "$minecraft+build.3"
const val fabricLoader = "0.16.5"
const val minecraft = "1.21.10"
const val yarn = "$minecraft+build.1"
const val fabricLoader = "0.18.2"
const val architecuryLoom = "1.7.413"
const val architecturyPlugin = "3.4.159"
const val architecuryLoom = "1.11.451"
const val architecturyPlugin = "3.4.162"
}
//
// object Forge {
@@ -54,17 +60,20 @@ object Versions {
// }
object Bukkit {
const val minecraft = "1.21.1"
const val paperBuild = "$minecraft-R0.1-20240917.151311-80"
const val minecraft = "1.21.10"
const val nms = "$minecraft-R0.1"
const val paperBuild = "$nms-20251012.013929-7"
const val paper = paperBuild
const val paperLib = "1.0.8"
const val reflectionRemapper = "0.1.1"
const val reflectionRemapper = "0.1.3"
const val paperDevBundle = paperBuild
const val runPaper = "2.3.1"
const val paperWeight = "1.7.2"
const val paperWeight = "2.0.0-beta.19"
const val cloud = "2.0.0-beta.12"
const val multiverse = "5.3.0"
}
//
//
// object Sponge {
// const val sponge = "9.0.0-SNAPSHOT"
// const val mixin = "0.8.2"
@@ -72,7 +81,21 @@ object Versions {
// }
//
object CLI {
const val nbt = "6.1"
const val logback = "1.5.8"
const val logback = "1.5.19"
const val picocli = "4.7.7"
}
}
object Allay {
const val api = "0.13.0"
const val gson = "2.13.2"
const val mappings = "15398c1"
const val mappingsGenerator = "8fa6058"
const val mcmeta = "e85a17c"
}
object Minestom {
const val minestom = "2025.10.04-1.21.8"
}
}
+1 -1
View File
@@ -1,6 +1,6 @@
MIT License
Copyright (c) 2020-2023 Polyhedral Development
Copyright (c) 2020-2025 Polyhedral Development
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2020-2023 Polyhedral Development
* Copyright (c) 2020-2025 Polyhedral Development
*
* The Terra Core Addons are licensed under the terms of the MIT License. For more details,
* reference the LICENSE file in this module's root directory.
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2020-2023 Polyhedral Development
* Copyright (c) 2020-2025 Polyhedral Development
*
* The Terra Core Addons are licensed under the terms of the MIT License. For more details,
* reference the LICENSE file in this module's root directory.
@@ -46,6 +46,6 @@ class BaseBiomeColumn implements Column<Biome> {
@Override
public Biome get(int y) {
return biomeProvider.extrude(base, x, y, z, seed);
return biomeProvider.pipeline.extrude(base, x, y, z, seed);
}
}
@@ -6,37 +6,33 @@ import java.util.Set;
import java.util.stream.Collectors;
import com.dfsek.terra.addons.biome.extrusion.api.Extrusion;
import com.dfsek.terra.addons.biome.extrusion.utils.ExtrusionPipeline;
import com.dfsek.terra.addons.biome.extrusion.utils.ExtrusionPipelineFactory;
import com.dfsek.terra.api.util.Column;
import com.dfsek.terra.api.world.biome.Biome;
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
public class BiomeExtrusionProvider implements BiomeProvider {
public final ExtrusionPipeline pipeline;
private final BiomeProvider delegate;
private final Set<Biome> biomes;
private final List<Extrusion> extrusions;
private final int resolution;
public BiomeExtrusionProvider(BiomeProvider delegate, List<Extrusion> extrusions, int resolution) {
this.delegate = delegate;
this.biomes = delegate.stream().collect(Collectors.toSet());
extrusions.forEach(e -> biomes.addAll(e.getBiomes()));
this.extrusions = extrusions;
this.pipeline = ExtrusionPipelineFactory.create(extrusions);
this.resolution = resolution;
}
@Override
public Biome getBiome(int x, int y, int z, long seed) {
Biome delegated = delegate.getBiome(x, y, z, seed);
return extrude(delegated, x, y, z, seed);
}
public Biome extrude(Biome original, int x, int y, int z, long seed) {
for(Extrusion extrusion : extrusions) {
original = extrusion.extrude(original, x, y, z, seed);
}
return original;
return pipeline.extrude(delegated, x, y, z, seed);
}
@Override
@@ -64,4 +60,4 @@ public class BiomeExtrusionProvider implements BiomeProvider {
public BiomeProvider getDelegate() {
return delegate;
}
}
}
@@ -1,17 +1,17 @@
package com.dfsek.terra.addons.biome.extrusion.config.extrusions;
import com.dfsek.seismic.type.sampler.Sampler;
import com.dfsek.tectonic.api.config.template.annotations.Value;
import com.dfsek.tectonic.api.config.template.object.ObjectTemplate;
import com.dfsek.terra.addons.biome.extrusion.api.Extrusion;
import com.dfsek.terra.api.config.meta.Meta;
import com.dfsek.terra.api.noise.NoiseSampler;
import com.dfsek.terra.api.util.Range;
import com.dfsek.terra.api.util.range.Range;
public abstract class SamplerExtrusionTemplate implements ObjectTemplate<Extrusion> {
@Value("sampler")
protected @Meta NoiseSampler sampler;
protected @Meta Sampler sampler;
@Value("range")
protected @Meta Range range;
@@ -1,5 +1,7 @@
package com.dfsek.terra.addons.biome.extrusion.extrusions;
import com.dfsek.seismic.type.sampler.Sampler;
import java.util.Collection;
import java.util.function.Predicate;
import java.util.stream.Collectors;
@@ -7,9 +9,9 @@ import java.util.stream.Collectors;
import com.dfsek.terra.addons.biome.extrusion.api.Extrusion;
import com.dfsek.terra.addons.biome.extrusion.api.ReplaceableBiome;
import com.dfsek.terra.addons.biome.query.api.BiomeQueries;
import com.dfsek.terra.api.noise.NoiseSampler;
import com.dfsek.terra.api.util.Range;
import com.dfsek.terra.api.util.collection.ProbabilityCollection;
import com.dfsek.terra.api.util.collection.TriStateIntCache;
import com.dfsek.terra.api.util.range.Range;
import com.dfsek.terra.api.world.biome.Biome;
@@ -17,26 +19,42 @@ import com.dfsek.terra.api.world.biome.Biome;
* Sets biomes at locations based on a sampler.
*/
public class ReplaceExtrusion implements Extrusion {
private final NoiseSampler sampler;
private final Sampler sampler;
private final Range range;
private final ProbabilityCollection<ReplaceableBiome> biomes;
private final Predicate<Biome> hasTag;
private final TriStateIntCache cache;
public ReplaceExtrusion(NoiseSampler sampler, Range range, ProbabilityCollection<ReplaceableBiome> biomes, String tag) {
public ReplaceExtrusion(Sampler sampler, Range range, ProbabilityCollection<ReplaceableBiome> biomes, String tag) {
this.sampler = sampler;
this.range = range;
this.biomes = biomes;
this.hasTag = BiomeQueries.has(tag);
this.cache = new TriStateIntCache(Biome.INT_ID_COUNTER.get());
}
@Override
public Biome extrude(Biome original, int x, int y, int z, long seed) {
if(hasTag.test(original)) {
return range.ifInRange(y, () -> biomes.get(sampler, x, y, z, seed).get(original), original);
int id = original.getIntID();
long state = cache.get(id);
boolean passes;
if(state == TriStateIntCache.STATE_UNSET) {
// Only run the test if unset in cache
passes = hasTag.test(original);
cache.set(id, passes);
} else {
// Read the primitive long directly
passes = (state == TriStateIntCache.STATE_TRUE);
}
if(passes) {
if(range.isInRange(y)) {
return biomes.get(sampler, x, y, z, seed).get(original);
}
}
return original;
}
@@ -1,14 +1,15 @@
package com.dfsek.terra.addons.biome.extrusion.extrusions;
import com.dfsek.seismic.type.sampler.Sampler;
import java.util.Collection;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import com.dfsek.terra.addons.biome.extrusion.api.Extrusion;
import com.dfsek.terra.addons.biome.extrusion.api.ReplaceableBiome;
import com.dfsek.terra.api.noise.NoiseSampler;
import com.dfsek.terra.api.util.Range;
import com.dfsek.terra.api.util.collection.ProbabilityCollection;
import com.dfsek.terra.api.util.range.Range;
import com.dfsek.terra.api.world.biome.Biome;
@@ -16,13 +17,13 @@ import com.dfsek.terra.api.world.biome.Biome;
* Sets biomes at locations based on a sampler.
*/
public class SetExtrusion implements Extrusion {
private final NoiseSampler sampler;
private final Sampler sampler;
private final Range range;
private final ProbabilityCollection<ReplaceableBiome> biomes;
public SetExtrusion(NoiseSampler sampler, Range range, ProbabilityCollection<ReplaceableBiome> biomes) {
public SetExtrusion(Sampler sampler, Range range, ProbabilityCollection<ReplaceableBiome> biomes) {
this.sampler = sampler;
this.range = range;
this.biomes = biomes;
@@ -0,0 +1,8 @@
package com.dfsek.terra.addons.biome.extrusion.utils;
import com.dfsek.terra.api.world.biome.Biome;
public interface ExtrusionPipeline {
Biome extrude(Biome original, int x, int y, int z, long seed);
}
@@ -0,0 +1,158 @@
package com.dfsek.terra.addons.biome.extrusion.utils;
import org.objectweb.asm.ClassWriter;
import org.objectweb.asm.FieldVisitor;
import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.Type;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
import com.dfsek.terra.addons.biome.extrusion.api.Extrusion;
import com.dfsek.terra.api.world.biome.Biome;
import static org.objectweb.asm.Opcodes.AALOAD;
import static org.objectweb.asm.Opcodes.ACC_FINAL;
import static org.objectweb.asm.Opcodes.ACC_PRIVATE;
import static org.objectweb.asm.Opcodes.ACC_PUBLIC;
import static org.objectweb.asm.Opcodes.ALOAD;
import static org.objectweb.asm.Opcodes.ARETURN;
import static org.objectweb.asm.Opcodes.GETFIELD;
import static org.objectweb.asm.Opcodes.ILOAD;
import static org.objectweb.asm.Opcodes.INVOKEINTERFACE;
import static org.objectweb.asm.Opcodes.INVOKESPECIAL;
import static org.objectweb.asm.Opcodes.LLOAD;
import static org.objectweb.asm.Opcodes.PUTFIELD;
import static org.objectweb.asm.Opcodes.RETURN;
import static org.objectweb.asm.Opcodes.SIPUSH;
import static org.objectweb.asm.Opcodes.SWAP;
import static org.objectweb.asm.Opcodes.V1_8;
public class ExtrusionPipelineFactory {
private static final AtomicInteger ID_COUNTER = new AtomicInteger(0);
// Type Descriptors
private static final String EXTRUSION_TYPE = Type.getInternalName(Extrusion.class);
private static final String EXTRUSION_DESC = Type.getDescriptor(Extrusion.class);
private static final String BIOME_DESC = Type.getDescriptor(Biome.class);
private static final String PIPELINE_INTERFACE = Type.getInternalName(ExtrusionPipeline.class);
// Method Signature: (Biome, int, int, int, long) -> Biome
private static final String EXTRUDE_SIG = "(" + BIOME_DESC + "IIIJ)" + BIOME_DESC;
public static ExtrusionPipeline create(List<Extrusion> extrusions) {
// Optimization: If empty, return identity
if(extrusions.isEmpty()) {
return (original, x, y, z, seed) -> original;
}
String className = "com/dfsek/terra/addons/biome/extrusion/GeneratedExtrusionPipeline_" + ID_COUNTER.getAndIncrement();
ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS);
// 1. Define Class
cw.visit(V1_8, ACC_PUBLIC | ACC_FINAL, className, null, "java/lang/Object", new String[]{ PIPELINE_INTERFACE });
// 2. Define Fields (e0, e1, e2...)
for(int i = 0; i < extrusions.size(); i++) {
FieldVisitor fv = cw.visitField(ACC_PRIVATE | ACC_FINAL, "e" + i, EXTRUSION_DESC, null, null);
fv.visitEnd();
}
// 3. Generate Constructor(Extrusion[])
generateConstructor(cw, className, extrusions.size());
// 4. Generate extrude() method
generateExtrudeMethod(cw, className, extrusions.size());
cw.visitEnd();
// 5. Load and Instantiate
byte[] bytecode = cw.toByteArray();
try {
Class<?> generatedClass = new PipelineClassLoader(ExtrusionPipelineFactory.class.getClassLoader())
.defineClass(className.replace('/', '.'), bytecode);
return (ExtrusionPipeline) generatedClass.getConstructor(Extrusion[].class)
.newInstance((Object) extrusions.toArray(new Extrusion[0]));
} catch(Exception e) {
throw new RuntimeException("Failed to generate ExtrusionPipeline", e);
}
}
private static void generateConstructor(ClassWriter cw, String className, int count) {
MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "<init>", "([L" + EXTRUSION_TYPE + ";)V", null, null);
mv.visitCode();
// super()
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V", false);
// Assign array elements to fields
for(int i = 0; i < count; i++) {
mv.visitVarInsn(ALOAD, 0); // Load this
mv.visitVarInsn(ALOAD, 1); // Load array argument
mv.visitIntInsn(SIPUSH, i); // Load index
mv.visitInsn(AALOAD); // Load array[i]
mv.visitFieldInsn(PUTFIELD, className, "e" + i, EXTRUSION_DESC);
}
mv.visitInsn(RETURN);
mv.visitMaxs(0, 0); // Computed automatically
mv.visitEnd();
}
private static void generateExtrudeMethod(ClassWriter cw, String className, int count) {
MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "extrude", EXTRUDE_SIG, null, null);
mv.visitCode();
// Helper var indices:
// 0: this
// 1: Biome original (We will update this or chain it on stack)
// 2: int x
// 3: int y
// 4: int z
// 5: long seed
mv.visitVarInsn(ALOAD, 1); // Load 'original' Biome onto stack initially
for(int i = 0; i < count; i++) {
// Stack contains: [CurrentBiome]
mv.visitVarInsn(ALOAD, 0); // Load 'this'
mv.visitFieldInsn(GETFIELD, className, "e" + i, EXTRUSION_DESC); // Load Extrusion field
// Stack: [CurrentBiome, Extrusion]
// We need: [Extrusion, CurrentBiome, x, y, z, seed]
mv.visitInsn(SWAP); // Swap to get [Extrusion, CurrentBiome]
mv.visitVarInsn(ILOAD, 2); // x
mv.visitVarInsn(ILOAD, 3); // y
mv.visitVarInsn(ILOAD, 4); // z
mv.visitVarInsn(LLOAD, 5); // seed
// Invoke Extrusion.extrude(Biome, x, y, z, seed)
mv.visitMethodInsn(INVOKEINTERFACE, EXTRUSION_TYPE, "extrude", EXTRUDE_SIG, true);
// Stack now contains: [NewBiome]
// Loop continues using this result as input for the next one
}
mv.visitInsn(ARETURN); // Return the final Biome
mv.visitMaxs(0, 0);
mv.visitEnd();
}
// Custom ClassLoader to inject the bytes
private static class PipelineClassLoader extends ClassLoader {
public PipelineClassLoader(ClassLoader parent) {
super(parent);
}
public Class<?> defineClass(String name, byte[] b) {
return defineClass(name, b, 0, b.length);
}
}
}
@@ -1,21 +0,0 @@
MIT License
Copyright (c) 2020-2023 Polyhedral Development
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
@@ -1,5 +0,0 @@
# biome-provider-image-v2
Implements and registers the `IMAGE` biome provider, which
utilizes various config types provided by the `library-image` addon to
distribute biomes based on images.
@@ -1,8 +0,0 @@
version = version("1.0.1")
dependencies {
compileOnlyApi(project(":common:addons:manifest-addon-loader"))
compileOnlyApi(project(":common:addons:library-image"))
}
@@ -1,51 +0,0 @@
/*
* Copyright (c) 2020-2023 Polyhedral Development
*
* The Terra Core Addons are licensed under the terms of the MIT License. For more details,
* reference the LICENSE file in this module's root directory.
*/
package com.dfsek.terra.addons.biome.image.v2;
import java.util.Optional;
import com.dfsek.terra.addons.image.colorsampler.ColorSampler;
import com.dfsek.terra.addons.image.converter.ColorConverter;
import com.dfsek.terra.api.world.biome.Biome;
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
public class ImageBiomeProvider implements BiomeProvider {
private final int resolution;
private final ColorConverter<Biome> colorConverter;
private final ColorSampler colorSampler;
public ImageBiomeProvider(ColorConverter<Biome> colorConverter, ColorSampler colorSampler, int resolution) {
this.resolution = resolution;
this.colorConverter = colorConverter;
this.colorSampler = colorSampler;
}
@Override
public Biome getBiome(int x, int y, int z, long seed) {
return getBiome(x, z);
}
public Biome getBiome(int x, int z) {
x /= resolution;
z /= resolution;
return colorConverter.apply(colorSampler.apply(x, z));
}
@Override
public Optional<Biome> getBaseBiome(int x, int z, long seed) {
return Optional.of(getBiome(x, z));
}
@Override
public Iterable<Biome> getBiomes() {
return colorConverter.getEntries();
}
}
@@ -1,78 +0,0 @@
/*
* Copyright (c) 2020-2023 Polyhedral Development
*
* The Terra Core Addons are licensed under the terms of the MIT License. For more details,
* reference the LICENSE file in this module's root directory.
*/
package com.dfsek.terra.addons.biome.image.v2;
import com.dfsek.tectonic.api.config.template.object.ObjectTemplate;
import java.util.function.Supplier;
import com.dfsek.terra.addons.biome.image.v2.config.ImageProviderTemplate;
import com.dfsek.terra.addons.biome.image.v2.config.converter.ClosestBiomeColorConverterTemplate;
import com.dfsek.terra.addons.biome.image.v2.config.converter.ExactBiomeColorConverterTemplate;
import com.dfsek.terra.addons.biome.image.v2.config.converter.mapping.DefinedBiomeColorMappingTemplate;
import com.dfsek.terra.addons.image.converter.ColorConverter;
import com.dfsek.terra.addons.image.converter.mapping.BiomeDefinedColorMapping;
import com.dfsek.terra.addons.image.converter.mapping.ColorMapping;
import com.dfsek.terra.addons.manifest.api.AddonInitializer;
import com.dfsek.terra.api.Platform;
import com.dfsek.terra.api.addon.BaseAddon;
import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent;
import com.dfsek.terra.api.event.functional.FunctionalEventHandler;
import com.dfsek.terra.api.inject.annotations.Inject;
import com.dfsek.terra.api.registry.CheckedRegistry;
import com.dfsek.terra.api.util.reflection.TypeKey;
import com.dfsek.terra.api.world.biome.Biome;
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
public class ImageBiomeProviderAddon implements AddonInitializer {
public static final TypeKey<Supplier<ObjectTemplate<BiomeProvider>>> PROVIDER_REGISTRY_KEY = new TypeKey<>() {
};
public static final TypeKey<Supplier<ObjectTemplate<ColorConverter<Biome>>>> BIOME_COLOR_CONVERTER_REGISTRY_KEY = new TypeKey<>() {
};
public static final TypeKey<Supplier<ObjectTemplate<ColorMapping<Biome>>>> BIOME_COLOR_MAPPING_REGISTRY_KEY = new TypeKey<>() {
};
@Inject
private Platform platform;
@Inject
private BaseAddon addon;
@Override
public void initialize() {
platform.getEventManager()
.getHandler(FunctionalEventHandler.class)
.register(addon, ConfigPackPreLoadEvent.class)
.priority(501)
.then(event -> {
CheckedRegistry<Supplier<ObjectTemplate<BiomeProvider>>> providerRegistry = event.getPack().getOrCreateRegistry(
PROVIDER_REGISTRY_KEY);
providerRegistry.register(addon.key("IMAGE"), ImageProviderTemplate::new);
})
.then(event -> {
CheckedRegistry<Supplier<ObjectTemplate<ColorConverter<Biome>>>> biomeColorConverterRegistry =
event.getPack().getOrCreateRegistry(
BIOME_COLOR_CONVERTER_REGISTRY_KEY);
biomeColorConverterRegistry.register(addon.key("EXACT"), ExactBiomeColorConverterTemplate::new);
biomeColorConverterRegistry.register(addon.key("CLOSEST"), ClosestBiomeColorConverterTemplate::new);
})
.then(event -> {
CheckedRegistry<Supplier<ObjectTemplate<ColorMapping<Biome>>>> biomeColorMappingRegistry =
event.getPack().getOrCreateRegistry(
BIOME_COLOR_MAPPING_REGISTRY_KEY);
biomeColorMappingRegistry.register(addon.key("USE_BIOME_COLORS"),
() -> () -> new BiomeDefinedColorMapping<>(event.getPack().getRegistry(Biome.class),
b -> b));
biomeColorMappingRegistry.register(addon.key("MAP"), DefinedBiomeColorMappingTemplate::new);
})
.failThrough();
}
}
@@ -1,14 +0,0 @@
schema-version: 1
contributors:
- Terra contributors
id: biome-provider-image-v2
version: @VERSION@
entrypoints:
- "com.dfsek.terra.addons.biome.image.v2.ImageBiomeProviderAddon"
website:
issues: https://github.com/PolyhedralDev/Terra/issues
source: https://github.com/PolyhedralDev/Terra
docs: https://terra.polydev.org
license: MIT License
depends:
library-image: "1.+"
+1 -1
View File
@@ -1,6 +1,6 @@
MIT License
Copyright (c) 2020-2023 Polyhedral Development
Copyright (c) 2020-2025 Polyhedral Development
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
+4 -5
View File
@@ -1,6 +1,5 @@
# biome-provider-image
# biome-provider-image-v2
Implements and registers the `IMAGE` biome provider, a biome provider which
generates biomes from an image, using the `color` attribute of biomes.
This addon registers the provider type, and all associated config options.
Implements and registers the `IMAGE` biome provider, which
utilizes various config types provided by the `library-image` addon to
distribute biomes based on images.
@@ -1,7 +1,8 @@
version = version("1.0.1")
version = version("2.0.0")
dependencies {
compileOnlyApi(project(":common:addons:manifest-addon-loader"))
compileOnlyApi(project(":common:addons:library-image"))
}
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2020-2023 Polyhedral Development
* Copyright (c) 2020-2025 Polyhedral Development
*
* The Terra Core Addons are licensed under the terms of the MIT License. For more details,
* reference the LICENSE file in this module's root directory.
@@ -7,32 +7,25 @@
package com.dfsek.terra.addons.biome.image;
import java.awt.Color;
import java.awt.image.BufferedImage;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import com.dfsek.terra.addons.image.colorsampler.ColorSampler;
import com.dfsek.terra.addons.image.converter.ColorConverter;
import com.dfsek.terra.api.world.biome.Biome;
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
public class ImageBiomeProvider implements BiomeProvider {
private final Map<Color, Biome> colorBiomeMap = new HashMap<>();
private final BufferedImage image;
private final int resolution;
private final Align align;
public ImageBiomeProvider(Set<Biome> registry, BufferedImage image, int resolution, Align align) {
this.image = image;
private final ColorConverter<Biome> colorConverter;
private final ColorSampler colorSampler;
public ImageBiomeProvider(ColorConverter<Biome> colorConverter, ColorSampler colorSampler, int resolution) {
this.resolution = resolution;
this.align = align;
registry.forEach(biome -> colorBiomeMap.put(new Color(biome.getColor()), biome));
}
private static int distance(Color a, Color b) {
return Math.abs(a.getRed() - b.getRed()) + Math.abs(a.getGreen() - b.getGreen()) + Math.abs(a.getBlue() - b.getBlue());
this.colorConverter = colorConverter;
this.colorSampler = colorSampler;
}
@Override
@@ -43,15 +36,7 @@ public class ImageBiomeProvider implements BiomeProvider {
public Biome getBiome(int x, int z) {
x /= resolution;
z /= resolution;
Color color = align.getColor(image, x, z);
return colorBiomeMap.get(colorBiomeMap.keySet()
.stream()
.reduce(colorBiomeMap.keySet().stream().findAny().orElseThrow(IllegalStateException::new),
(running, element) -> {
int d1 = distance(color, running);
int d2 = distance(color, element);
return d1 < d2 ? running : element;
}));
return colorConverter.apply(colorSampler.apply(x, z));
}
@Override
@@ -61,24 +46,6 @@ public class ImageBiomeProvider implements BiomeProvider {
@Override
public Iterable<Biome> getBiomes() {
return colorBiomeMap.values();
}
public enum Align {
CENTER {
@Override
public Color getColor(BufferedImage image, int x, int z) {
return new Color(image.getRGB(Math.floorMod(x - image.getWidth() / 2, image.getWidth()),
Math.floorMod(z - image.getHeight() / 2, image.getHeight())));
}
},
NONE {
@Override
public Color getColor(BufferedImage image, int x, int z) {
return new Color(image.getRGB(Math.floorMod(x, image.getWidth()), Math.floorMod(z, image.getHeight())));
}
};
public abstract Color getColor(BufferedImage image, int x, int z);
return colorConverter.getEntries();
}
}
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2020-2023 Polyhedral Development
* Copyright (c) 2020-2025 Polyhedral Development
*
* The Terra Core Addons are licensed under the terms of the MIT License. For more details,
* reference the LICENSE file in this module's root directory.
@@ -8,11 +8,16 @@
package com.dfsek.terra.addons.biome.image;
import com.dfsek.tectonic.api.config.template.object.ObjectTemplate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.function.Supplier;
import com.dfsek.terra.addons.biome.image.config.ImageProviderTemplate;
import com.dfsek.terra.addons.biome.image.config.converter.ClosestBiomeColorConverterTemplate;
import com.dfsek.terra.addons.biome.image.config.converter.ExactBiomeColorConverterTemplate;
import com.dfsek.terra.addons.biome.image.config.converter.mapping.DefinedBiomeColorMappingTemplate;
import com.dfsek.terra.addons.image.converter.ColorConverter;
import com.dfsek.terra.addons.image.converter.mapping.BiomeDefinedColorMapping;
import com.dfsek.terra.addons.image.converter.mapping.ColorMapping;
import com.dfsek.terra.addons.manifest.api.AddonInitializer;
import com.dfsek.terra.api.Platform;
import com.dfsek.terra.api.addon.BaseAddon;
@@ -26,10 +31,15 @@ import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
public class ImageBiomeProviderAddon implements AddonInitializer {
public static final TypeKey<Supplier<ObjectTemplate<BiomeProvider>>> PROVIDER_REGISTRY_KEY = new TypeKey<>() {
};
private static final Logger logger = LoggerFactory.getLogger(ImageBiomeProviderAddon.class);
public static final TypeKey<Supplier<ObjectTemplate<ColorConverter<Biome>>>> BIOME_COLOR_CONVERTER_REGISTRY_KEY = new TypeKey<>() {
};
public static final TypeKey<Supplier<ObjectTemplate<ColorMapping<Biome>>>> BIOME_COLOR_MAPPING_REGISTRY_KEY = new TypeKey<>() {
};
@Inject
private Platform platform;
@@ -41,16 +51,28 @@ public class ImageBiomeProviderAddon implements AddonInitializer {
platform.getEventManager()
.getHandler(FunctionalEventHandler.class)
.register(addon, ConfigPackPreLoadEvent.class)
.priority(501)
.then(event -> {
CheckedRegistry<Supplier<ObjectTemplate<BiomeProvider>>> providerRegistry = event.getPack().getOrCreateRegistry(
PROVIDER_REGISTRY_KEY);
providerRegistry.register(addon.key("IMAGE"),
() -> new ImageProviderTemplate(event.getPack().getRegistry(Biome.class)));
providerRegistry.register(addon.key("IMAGE"), ImageProviderTemplate::new);
})
.then(event -> {
CheckedRegistry<Supplier<ObjectTemplate<ColorConverter<Biome>>>> biomeColorConverterRegistry =
event.getPack().getOrCreateRegistry(
BIOME_COLOR_CONVERTER_REGISTRY_KEY);
biomeColorConverterRegistry.register(addon.key("EXACT"), ExactBiomeColorConverterTemplate::new);
biomeColorConverterRegistry.register(addon.key("CLOSEST"), ClosestBiomeColorConverterTemplate::new);
})
.then(event -> {
CheckedRegistry<Supplier<ObjectTemplate<ColorMapping<Biome>>>> biomeColorMappingRegistry =
event.getPack().getOrCreateRegistry(
BIOME_COLOR_MAPPING_REGISTRY_KEY);
biomeColorMappingRegistry.register(addon.key("USE_BIOME_COLORS"),
() -> () -> new BiomeDefinedColorMapping<>(event.getPack().getRegistry(Biome.class),
b -> b));
biomeColorMappingRegistry.register(addon.key("MAP"), DefinedBiomeColorMappingTemplate::new);
})
.failThrough();
if(platform.getTerraConfig().isDebugLog())
logger.warn(
"The biome-provider-image addon is deprecated and scheduled for removal in Terra 7.0. It is recommended to use the " +
"biome-provider-image-v2 addon for future pack development instead.");
}
}
@@ -1,45 +0,0 @@
/*
* Copyright (c) 2020-2023 Polyhedral Development
*
* The Terra Core Addons are licensed under the terms of the MIT License. For more details,
* reference the LICENSE file in this module's root directory.
*/
package com.dfsek.terra.addons.biome.image;
import com.dfsek.tectonic.api.config.template.annotations.Default;
import com.dfsek.tectonic.api.config.template.annotations.Description;
import com.dfsek.tectonic.api.config.template.annotations.Value;
import com.dfsek.tectonic.api.config.template.object.ObjectTemplate;
import java.awt.image.BufferedImage;
import java.util.HashSet;
import com.dfsek.terra.api.registry.Registry;
import com.dfsek.terra.api.world.biome.Biome;
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
@SuppressWarnings("FieldMayBeFinal")
public class ImageProviderTemplate implements ObjectTemplate<BiomeProvider> {
private final Registry<Biome> biomes;
@Value("resolution")
@Default
@Description("Sets the resolution at which to sample the image.")
private int resolution = 1;
@Value("image.name")
@Description("Sets the location of the image on the filesystem, relative to the pack root.")
private BufferedImage image;
@Value("image.align")
@Description("Sets the alignment style to use for the image.")
private ImageBiomeProvider.Align align;
public ImageProviderTemplate(Registry<Biome> set) {
this.biomes = set;
}
@Override
public BiomeProvider get() {
return new ImageBiomeProvider(new HashSet<>(biomes.entries()), image, resolution, align);
}
}
@@ -1,18 +1,18 @@
/*
* Copyright (c) 2020-2023 Polyhedral Development
* Copyright (c) 2020-2025 Polyhedral Development
*
* The Terra Core Addons are licensed under the terms of the MIT License. For more details,
* reference the LICENSE file in this module's root directory.
*/
package com.dfsek.terra.addons.biome.image.v2.config;
package com.dfsek.terra.addons.biome.image.config;
import com.dfsek.tectonic.api.config.template.annotations.Default;
import com.dfsek.tectonic.api.config.template.annotations.Description;
import com.dfsek.tectonic.api.config.template.annotations.Value;
import com.dfsek.tectonic.api.config.template.object.ObjectTemplate;
import com.dfsek.terra.addons.biome.image.v2.ImageBiomeProvider;
import com.dfsek.terra.addons.biome.image.ImageBiomeProvider;
import com.dfsek.terra.addons.image.colorsampler.ColorSampler;
import com.dfsek.terra.addons.image.converter.ColorConverter;
import com.dfsek.terra.api.world.biome.Biome;
@@ -1,4 +1,4 @@
package com.dfsek.terra.addons.biome.image.v2.config.converter;
package com.dfsek.terra.addons.biome.image.config.converter;
import com.dfsek.tectonic.api.config.template.annotations.Value;
@@ -1,4 +1,4 @@
package com.dfsek.terra.addons.biome.image.v2.config.converter;
package com.dfsek.terra.addons.biome.image.config.converter;
import com.dfsek.tectonic.api.config.template.annotations.Default;
import com.dfsek.tectonic.api.config.template.annotations.Value;
@@ -1,4 +1,4 @@
package com.dfsek.terra.addons.biome.image.v2.config.converter.mapping;
package com.dfsek.terra.addons.biome.image.config.converter.mapping;
import com.dfsek.tectonic.api.config.template.annotations.Value;
import com.dfsek.tectonic.api.config.template.object.ObjectTemplate;
@@ -9,4 +9,6 @@ website:
issues: https://github.com/PolyhedralDev/Terra/issues
source: https://github.com/PolyhedralDev/Terra
docs: https://terra.polydev.org
license: MIT License
license: MIT License
depends:
library-image: "1.+"
@@ -1,21 +0,0 @@
MIT License
Copyright (c) 2020-2023 Polyhedral Development
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
@@ -1,12 +0,0 @@
# biome-provider-pipeline-2
The second version of the Biome Pipeline, a procedural biome provider that uses a series
of "stages" to apply "mutations" to a 2D grid of biomes.
Version 2 is a re-implementation of the original addon with the primary goal of providing
consistent scaling for noise relative to the world
(See https://github.com/PolyhedralDev/Terra/issues/264 for more details), and has been
included as a separate addon to maintain parity with packs utilizing the first version.
This addon registers the `PIPELINE` biome provider type, and all associated
configurations.
@@ -1,89 +0,0 @@
/*
* Copyright (c) 2020-2023 Polyhedral Development
*
* The Terra Core Addons are licensed under the terms of the MIT License. For more details,
* reference the LICENSE file in this module's root directory.
*/
package com.dfsek.terra.addons.biome.pipeline.v2;
import com.dfsek.tectonic.api.config.template.object.ObjectTemplate;
import java.util.function.Supplier;
import com.dfsek.terra.addons.biome.pipeline.v2.api.Source;
import com.dfsek.terra.addons.biome.pipeline.v2.api.Stage;
import com.dfsek.terra.addons.biome.pipeline.v2.api.biome.PipelineBiome;
import com.dfsek.terra.addons.biome.pipeline.v2.config.BiomePipelineTemplate;
import com.dfsek.terra.addons.biome.pipeline.v2.config.PipelineBiomeLoader;
import com.dfsek.terra.addons.biome.pipeline.v2.config.source.SamplerSourceTemplate;
import com.dfsek.terra.addons.biome.pipeline.v2.config.stage.expander.ExpanderStageTemplate;
import com.dfsek.terra.addons.biome.pipeline.v2.config.stage.mutator.BorderListStageTemplate;
import com.dfsek.terra.addons.biome.pipeline.v2.config.stage.mutator.BorderStageTemplate;
import com.dfsek.terra.addons.biome.pipeline.v2.config.stage.mutator.ReplaceListStageTemplate;
import com.dfsek.terra.addons.biome.pipeline.v2.config.stage.mutator.ReplaceStageTemplate;
import com.dfsek.terra.addons.biome.pipeline.v2.config.stage.mutator.SmoothStageTemplate;
import com.dfsek.terra.addons.manifest.api.AddonInitializer;
import com.dfsek.terra.api.Platform;
import com.dfsek.terra.api.addon.BaseAddon;
import com.dfsek.terra.api.event.events.config.pack.ConfigPackPostLoadEvent;
import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent;
import com.dfsek.terra.api.event.functional.FunctionalEventHandler;
import com.dfsek.terra.api.inject.annotations.Inject;
import com.dfsek.terra.api.registry.CheckedRegistry;
import com.dfsek.terra.api.registry.Registry;
import com.dfsek.terra.api.util.reflection.TypeKey;
import com.dfsek.terra.api.world.biome.Biome;
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
public class BiomePipelineAddon implements AddonInitializer {
public static final TypeKey<Supplier<ObjectTemplate<Source>>> SOURCE_REGISTRY_KEY = new TypeKey<>() {
};
public static final TypeKey<Supplier<ObjectTemplate<Stage>>> STAGE_REGISTRY_KEY = new TypeKey<>() {
};
public static final TypeKey<Supplier<ObjectTemplate<BiomeProvider>>> PROVIDER_REGISTRY_KEY = new TypeKey<>() {
};
@Inject
private Platform platform;
@Inject
private BaseAddon addon;
@Override
public void initialize() {
platform.getEventManager()
.getHandler(FunctionalEventHandler.class)
.register(addon, ConfigPackPreLoadEvent.class)
.then(event -> {
CheckedRegistry<Supplier<ObjectTemplate<BiomeProvider>>> providerRegistry = event.getPack().getOrCreateRegistry(
PROVIDER_REGISTRY_KEY);
providerRegistry.register(addon.key("PIPELINE"), BiomePipelineTemplate::new);
})
.then(event -> {
CheckedRegistry<Supplier<ObjectTemplate<Source>>> sourceRegistry = event.getPack().getOrCreateRegistry(
SOURCE_REGISTRY_KEY);
sourceRegistry.register(addon.key("SAMPLER"), SamplerSourceTemplate::new);
})
.then(event -> {
CheckedRegistry<Supplier<ObjectTemplate<Stage>>> stageRegistry = event.getPack().getOrCreateRegistry(
STAGE_REGISTRY_KEY);
stageRegistry.register(addon.key("FRACTAL_EXPAND"), ExpanderStageTemplate::new);
stageRegistry.register(addon.key("SMOOTH"), SmoothStageTemplate::new);
stageRegistry.register(addon.key("REPLACE"), ReplaceStageTemplate::new);
stageRegistry.register(addon.key("REPLACE_LIST"), ReplaceListStageTemplate::new);
stageRegistry.register(addon.key("BORDER"), BorderStageTemplate::new);
stageRegistry.register(addon.key("BORDER_LIST"), BorderListStageTemplate::new);
})
.failThrough();
platform.getEventManager()
.getHandler(FunctionalEventHandler.class)
.register(addon, ConfigPackPostLoadEvent.class)
.then(event -> {
Registry<Biome> biomeRegistry = event.getPack().getRegistry(Biome.class);
event.getPack().applyLoader(PipelineBiome.class, new PipelineBiomeLoader(biomeRegistry));
});
}
}
@@ -1,71 +0,0 @@
package com.dfsek.terra.addons.biome.pipeline.v2;
import java.util.function.Consumer;
import com.dfsek.terra.api.util.Column;
import com.dfsek.terra.api.util.function.IntIntObjConsumer;
import com.dfsek.terra.api.util.function.IntObjConsumer;
import com.dfsek.terra.api.world.biome.Biome;
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
public class BiomePipelineColumn implements Column<Biome> {
private final int min;
private final int max;
private final int x;
private final int z;
private final Biome biome;
protected BiomePipelineColumn(BiomeProvider biomeProvider, int min, int max, int x, int z, long seed) {
this.min = min;
this.max = max;
this.x = x;
this.z = z;
this.biome = biomeProvider.getBiome(x, 0, z, seed);
}
@Override
public int getMinY() {
return min;
}
@Override
public int getMaxY() {
return max;
}
@Override
public int getX() {
return x;
}
@Override
public int getZ() {
return z;
}
@Override
public Biome get(int y) {
return biome;
}
@Override
public void forRanges(int resolution, IntIntObjConsumer<Biome> consumer) {
consumer.accept(min, max, biome);
}
@Override
public void forEach(Consumer<Biome> consumer) {
for(int y = min; y < max; y++) {
consumer.accept(biome);
}
}
@Override
public void forEach(IntObjConsumer<Biome> consumer) {
for(int y = min; y < max; y++) {
consumer.accept(y, biome);
}
}
}
@@ -1,10 +0,0 @@
package com.dfsek.terra.addons.biome.pipeline.v2.api;
import com.dfsek.terra.addons.biome.pipeline.v2.api.biome.PipelineBiome;
public interface BiomeChunk {
PipelineBiome get(int xInChunk, int zInChunk);
}
@@ -1,14 +0,0 @@
package com.dfsek.terra.addons.biome.pipeline.v2.api;
import java.util.List;
public interface Pipeline {
BiomeChunk generateChunk(SeededVector worldCoordinates);
int getChunkSize();
Source getSource();
List<Stage> getStages();
}
@@ -1,19 +0,0 @@
package com.dfsek.terra.addons.biome.pipeline.v2.api;
public record SeededVector(long seed, int x, int z) {
@Override
public boolean equals(Object obj) {
if(obj instanceof SeededVector that) {
return this.z == that.z && this.x == that.x && this.seed == that.seed;
}
return false;
}
@Override
public int hashCode() {
int code = x;
code = 31 * code + z;
return 31 * code + ((int) (seed ^ (seed >>> 32)));
}
}
@@ -1,11 +0,0 @@
package com.dfsek.terra.addons.biome.pipeline.v2.api;
import com.dfsek.terra.addons.biome.pipeline.v2.api.biome.PipelineBiome;
public interface Source {
PipelineBiome get(long seed, int x, int z);
Iterable<PipelineBiome> getBiomes();
}
@@ -1,15 +0,0 @@
package com.dfsek.terra.addons.biome.pipeline.v2.api;
import com.dfsek.terra.addons.biome.pipeline.v2.api.biome.PipelineBiome;
import com.dfsek.terra.addons.biome.pipeline.v2.pipeline.BiomeChunkImpl.ViewPoint;
public interface Stage {
PipelineBiome apply(ViewPoint viewPoint);
int maxRelativeReadDistance();
default Iterable<PipelineBiome> getBiomes(Iterable<PipelineBiome> biomes) {
return biomes;
}
}
@@ -1,55 +0,0 @@
/*
* Copyright (c) 2020-2023 Polyhedral Development
*
* The Terra Core Addons are licensed under the terms of the MIT License. For more details,
* reference the LICENSE file in this module's root directory.
*/
package com.dfsek.terra.addons.biome.pipeline.v2.config;
import com.dfsek.tectonic.api.config.template.annotations.Default;
import com.dfsek.tectonic.api.config.template.annotations.Description;
import com.dfsek.tectonic.api.config.template.annotations.Value;
import com.dfsek.tectonic.api.config.template.object.ObjectTemplate;
import java.util.List;
import com.dfsek.terra.addons.biome.pipeline.v2.PipelineBiomeProvider;
import com.dfsek.terra.addons.biome.pipeline.v2.api.Source;
import com.dfsek.terra.addons.biome.pipeline.v2.api.Stage;
import com.dfsek.terra.addons.biome.pipeline.v2.pipeline.PipelineImpl;
import com.dfsek.terra.api.config.meta.Meta;
import com.dfsek.terra.api.noise.NoiseSampler;
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
@SuppressWarnings({ "FieldMayBeFinal", "unused" })
public class BiomePipelineTemplate implements ObjectTemplate<BiomeProvider> {
@Value("resolution")
@Default
@Description("""
The resolution at which to sample biomes.
Larger values are quadratically faster, but produce lower quality results.
For example, a value of 3 would sample every 3 blocks.""")
protected @Meta int resolution = 1;
@Value("blend.sampler")
@Default
@Description("A sampler to use for blending the edges of biomes via domain warping.")
protected @Meta NoiseSampler blendSampler = NoiseSampler.zero();
@Value("blend.amplitude")
@Default
@Description("The amplitude at which to perform blending.")
protected @Meta double blendAmplitude = 0d;
@Value("pipeline.source")
@Description("The Biome Source to use for initial population of biomes.")
private @Meta Source source;
@Value("pipeline.stages")
@Description("A list of pipeline stages to apply to the result of #source")
private @Meta List<@Meta Stage> stages;
@Override
public BiomeProvider get() {
return new PipelineBiomeProvider(new PipelineImpl(source, stages, resolution, 128), resolution, blendSampler, blendAmplitude);
}
}
@@ -1,23 +0,0 @@
/*
* Copyright (c) 2020-2023 Polyhedral Development
*
* The Terra Core Addons are licensed under the terms of the MIT License. For more details,
* reference the LICENSE file in this module's root directory.
*/
package com.dfsek.terra.addons.biome.pipeline.v2.config.stage;
import com.dfsek.tectonic.api.config.template.annotations.Description;
import com.dfsek.tectonic.api.config.template.annotations.Value;
import com.dfsek.tectonic.api.config.template.object.ObjectTemplate;
import com.dfsek.terra.addons.biome.pipeline.v2.api.Stage;
import com.dfsek.terra.api.config.meta.Meta;
import com.dfsek.terra.api.noise.NoiseSampler;
public abstract class StageTemplate implements ObjectTemplate<Stage> {
@Value("sampler")
@Description("Sampler to use for stage distribution.")
protected @Meta NoiseSampler noise;
}
@@ -1,20 +0,0 @@
/*
* Copyright (c) 2020-2023 Polyhedral Development
*
* The Terra Core Addons are licensed under the terms of the MIT License. For more details,
* reference the LICENSE file in this module's root directory.
*/
package com.dfsek.terra.addons.biome.pipeline.v2.config.stage.expander;
import com.dfsek.terra.addons.biome.pipeline.v2.api.Expander;
import com.dfsek.terra.addons.biome.pipeline.v2.config.stage.StageTemplate;
import com.dfsek.terra.addons.biome.pipeline.v2.stage.expander.FractalExpander;
public class ExpanderStageTemplate extends StageTemplate {
@Override
public Expander get() {
return new FractalExpander(noise);
}
}
@@ -1,20 +0,0 @@
/*
* Copyright (c) 2020-2023 Polyhedral Development
*
* The Terra Core Addons are licensed under the terms of the MIT License. For more details,
* reference the LICENSE file in this module's root directory.
*/
package com.dfsek.terra.addons.biome.pipeline.v2.config.stage.mutator;
import com.dfsek.terra.addons.biome.pipeline.v2.api.Stage;
import com.dfsek.terra.addons.biome.pipeline.v2.config.stage.StageTemplate;
import com.dfsek.terra.addons.biome.pipeline.v2.stage.mutators.SmoothStage;
public class SmoothStageTemplate extends StageTemplate {
@Override
public Stage get() {
return new SmoothStage(noise);
}
}
@@ -1,27 +0,0 @@
package com.dfsek.terra.addons.biome.pipeline.v2.source;
import com.dfsek.terra.addons.biome.pipeline.v2.api.Source;
import com.dfsek.terra.addons.biome.pipeline.v2.api.biome.PipelineBiome;
import com.dfsek.terra.api.noise.NoiseSampler;
import com.dfsek.terra.api.util.collection.ProbabilityCollection;
public class SamplerSource implements Source {
private final ProbabilityCollection<PipelineBiome> biomes;
private final NoiseSampler sampler;
public SamplerSource(ProbabilityCollection<PipelineBiome> biomes, NoiseSampler sampler) {
this.biomes = biomes;
this.sampler = sampler;
}
@Override
public PipelineBiome get(long seed, int x, int z) {
return biomes.get(sampler, x, z, seed);
}
@Override
public Iterable<PipelineBiome> getBiomes() {
return biomes.getContents();
}
}
@@ -1,6 +1,6 @@
MIT License
Copyright (c) 2020-2023 Polyhedral Development
Copyright (c) 2020-2025 Polyhedral Development
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
@@ -1,7 +1,12 @@
# biome-provider-pipeline
# biome-provider-pipeline-2
Implements the Biome Pipeline, a procedural biome provider that uses a series
The second version of the Biome Pipeline, a procedural biome provider that uses a series
of "stages" to apply "mutations" to a 2D grid of biomes.
Version 2 is a re-implementation of the original addon with the primary goal of providing
consistent scaling for noise relative to the world
(See https://github.com/PolyhedralDev/Terra/issues/264 for more details), and has been
included as a separate addon to maintain parity with packs utilizing the first version.
This addon registers the `PIPELINE` biome provider type, and all associated
configurations.
@@ -1,5 +1,5 @@
version = version("1.0.2")
version = version("2.0.0")
dependencies {
compileOnlyApi(project(":common:addons:manifest-addon-loader"))
}
}
@@ -1,94 +0,0 @@
/*
* Copyright (c) 2020-2023 Polyhedral Development
*
* The Terra Core Addons are licensed under the terms of the MIT License. For more details,
* reference the LICENSE file in this module's root directory.
*/
package com.dfsek.terra.addons.biome.pipeline;
import com.dfsek.terra.addons.biome.pipeline.api.BiomeHolder;
import com.dfsek.terra.addons.biome.pipeline.api.delegate.BiomeDelegate;
import com.dfsek.terra.addons.biome.pipeline.api.stage.type.BiomeExpander;
import com.dfsek.terra.addons.biome.pipeline.api.stage.type.BiomeMutator;
import com.dfsek.terra.addons.biome.pipeline.source.BiomeSource;
import com.dfsek.terra.api.util.vector.Vector2;
public class BiomeHolderImpl implements BiomeHolder {
private final Vector2.Mutable origin;
private final int width;
private final int offset;
private BiomeDelegate[][] biomes;
public BiomeHolderImpl(int width, Vector2.Mutable origin) {
width += 4;
this.width = width;
biomes = new BiomeDelegate[width][width];
this.origin = origin;
this.offset = 2;
}
private BiomeHolderImpl(BiomeDelegate[][] biomes, Vector2.Mutable origin, int width, int offset) {
this.biomes = biomes;
this.origin = origin;
this.width = width;
this.offset = 2 * offset;
}
@Override
public BiomeHolder expand(BiomeExpander expander, long seed) {
BiomeDelegate[][] old = biomes;
int newWidth = width * 2 - 1;
biomes = new BiomeDelegate[newWidth][newWidth];
for(int x = 0; x < width; x++) {
for(int z = 0; z < width; z++) {
biomes[x * 2][z * 2] = old[x][z];
if(z != width - 1)
biomes[x * 2][z * 2 + 1] = expander.getBetween(x + origin.getX(), z + 1 + origin.getZ(), seed, old[x][z],
old[x][z + 1]);
if(x != width - 1)
biomes[x * 2 + 1][z * 2] = expander.getBetween(x + 1 + origin.getX(), z + origin.getZ(), seed, old[x][z],
old[x + 1][z]);
if(x != width - 1 && z != width - 1)
biomes[x * 2 + 1][z * 2 + 1] = expander.getBetween(x + 1 + origin.getX(), z + 1 + origin.getZ(), seed, old[x][z],
old[x + 1][z + 1], old[x][z + 1], old[x + 1][z]);
}
}
return new BiomeHolderImpl(biomes, origin.setX(origin.getX() * 2 - 1).setZ(origin.getZ() * 2 - 1), newWidth, offset);
}
@Override
public void mutate(BiomeMutator mutator, long seed) {
for(int x = 0; x < width; x++) {
for(int z = 0; z < width; z++) {
BiomeMutator.ViewPoint viewPoint = new BiomeMutator.ViewPoint(this, x, z);
biomes[x][z] = mutator.mutate(viewPoint, x + origin.getX(), z + origin.getZ(), seed);
}
}
}
@Override
public void fill(BiomeSource source, long seed) {
for(int x = 0; x < width; x++) {
for(int z = 0; z < width; z++) {
biomes[x][z] = source.getBiome(origin.getX() + x, origin.getZ() + z, seed);
}
}
}
@Override
public BiomeDelegate getBiome(int x, int z) {
x += offset;
z += offset;
return getBiomeRaw(x, z);
}
@Override
public BiomeDelegate getBiomeRaw(int x, int z) {
if(x >= width || z >= width || x < 0 || z < 0) return null;
return biomes[x][z];
}
}
@@ -1,83 +0,0 @@
/*
* Copyright (c) 2020-2023 Polyhedral Development
*
* The Terra Core Addons are licensed under the terms of the MIT License. For more details,
* reference the LICENSE file in this module's root directory.
*/
package com.dfsek.terra.addons.biome.pipeline;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import com.dfsek.terra.addons.biome.pipeline.api.BiomeHolder;
import com.dfsek.terra.addons.biome.pipeline.api.stage.Stage;
import com.dfsek.terra.addons.biome.pipeline.source.BiomeSource;
import com.dfsek.terra.api.util.vector.Vector2;
public class BiomePipeline {
private final BiomeSource source;
private final List<Stage> stages;
private final int size;
private final int init;
private BiomePipeline(BiomeSource source, List<Stage> stages, int size, int init) {
this.source = source;
this.stages = stages;
this.size = size;
this.init = init;
}
/**
* Get biomes in a chunk
*
* @param x Chunk X coord
* @param z Chunk Z coord
*
* @return BiomeHolder containing biomes.
*/
public BiomeHolder getBiomes(int x, int z, long seed) {
BiomeHolder holder = new BiomeHolderImpl(init, Vector2.of(x * (init - 1), z * (init - 1)).mutable());
holder.fill(source, seed);
for(Stage stage : stages) holder = stage.apply(holder, seed);
return holder;
}
public BiomeSource getSource() {
return source;
}
public List<Stage> getStages() {
return Collections.unmodifiableList(stages);
}
public int getSize() {
return size;
}
public static final class BiomePipelineBuilder {
private final int init;
private final List<Stage> stages = new ArrayList<>();
private int expand;
public BiomePipelineBuilder(int init) {
this.init = init;
expand = init;
}
public BiomePipeline build(BiomeSource source) {
for(Stage stage : stages) {
if(stage.isExpansion()) expand = expand * 2 - 1;
}
return new BiomePipeline(source, stages, expand, init);
}
public BiomePipelineBuilder addStage(Stage stage) {
stages.add(stage);
return this;
}
}
}
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2020-2023 Polyhedral Development
* Copyright (c) 2020-2025 Polyhedral Development
*
* The Terra Core Addons are licensed under the terms of the MIT License. For more details,
* reference the LICENSE file in this module's root directory.
@@ -8,23 +8,21 @@
package com.dfsek.terra.addons.biome.pipeline;
import com.dfsek.tectonic.api.config.template.object.ObjectTemplate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.function.Supplier;
import com.dfsek.terra.addons.biome.pipeline.api.delegate.BiomeDelegate;
import com.dfsek.terra.addons.biome.pipeline.api.stage.Stage;
import com.dfsek.terra.addons.biome.pipeline.config.BiomeDelegateLoader;
import com.dfsek.terra.addons.biome.pipeline.api.Source;
import com.dfsek.terra.addons.biome.pipeline.api.Stage;
import com.dfsek.terra.addons.biome.pipeline.api.biome.PipelineBiome;
import com.dfsek.terra.addons.biome.pipeline.config.BiomePipelineTemplate;
import com.dfsek.terra.addons.biome.pipeline.config.SamplerSourceTemplate;
import com.dfsek.terra.addons.biome.pipeline.config.PipelineBiomeLoader;
import com.dfsek.terra.addons.biome.pipeline.config.source.SamplerSourceTemplate;
import com.dfsek.terra.addons.biome.pipeline.config.stage.expander.ExpanderStageTemplate;
import com.dfsek.terra.addons.biome.pipeline.config.stage.mutator.BorderListMutatorTemplate;
import com.dfsek.terra.addons.biome.pipeline.config.stage.mutator.BorderMutatorTemplate;
import com.dfsek.terra.addons.biome.pipeline.config.stage.mutator.ReplaceListMutatorTemplate;
import com.dfsek.terra.addons.biome.pipeline.config.stage.mutator.ReplaceMutatorTemplate;
import com.dfsek.terra.addons.biome.pipeline.config.stage.mutator.SmoothMutatorTemplate;
import com.dfsek.terra.addons.biome.pipeline.source.BiomeSource;
import com.dfsek.terra.addons.biome.pipeline.config.stage.mutator.BorderListStageTemplate;
import com.dfsek.terra.addons.biome.pipeline.config.stage.mutator.BorderStageTemplate;
import com.dfsek.terra.addons.biome.pipeline.config.stage.mutator.ReplaceListStageTemplate;
import com.dfsek.terra.addons.biome.pipeline.config.stage.mutator.ReplaceStageTemplate;
import com.dfsek.terra.addons.biome.pipeline.config.stage.mutator.SmoothStageTemplate;
import com.dfsek.terra.addons.manifest.api.AddonInitializer;
import com.dfsek.terra.api.Platform;
import com.dfsek.terra.api.addon.BaseAddon;
@@ -41,13 +39,13 @@ import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
public class BiomePipelineAddon implements AddonInitializer {
public static final TypeKey<Supplier<ObjectTemplate<BiomeSource>>> SOURCE_REGISTRY_KEY = new TypeKey<>() {
public static final TypeKey<Supplier<ObjectTemplate<Source>>> SOURCE_REGISTRY_KEY = new TypeKey<>() {
};
public static final TypeKey<Supplier<ObjectTemplate<Stage>>> STAGE_REGISTRY_KEY = new TypeKey<>() {
};
public static final TypeKey<Supplier<ObjectTemplate<BiomeProvider>>> PROVIDER_REGISTRY_KEY = new TypeKey<>() {
};
private static final Logger logger = LoggerFactory.getLogger(BiomePipelineAddon.class);
@Inject
private Platform platform;
@@ -65,7 +63,7 @@ public class BiomePipelineAddon implements AddonInitializer {
providerRegistry.register(addon.key("PIPELINE"), BiomePipelineTemplate::new);
})
.then(event -> {
CheckedRegistry<Supplier<ObjectTemplate<BiomeSource>>> sourceRegistry = event.getPack().getOrCreateRegistry(
CheckedRegistry<Supplier<ObjectTemplate<Source>>> sourceRegistry = event.getPack().getOrCreateRegistry(
SOURCE_REGISTRY_KEY);
sourceRegistry.register(addon.key("SAMPLER"), SamplerSourceTemplate::new);
})
@@ -73,11 +71,11 @@ public class BiomePipelineAddon implements AddonInitializer {
CheckedRegistry<Supplier<ObjectTemplate<Stage>>> stageRegistry = event.getPack().getOrCreateRegistry(
STAGE_REGISTRY_KEY);
stageRegistry.register(addon.key("FRACTAL_EXPAND"), ExpanderStageTemplate::new);
stageRegistry.register(addon.key("SMOOTH"), SmoothMutatorTemplate::new);
stageRegistry.register(addon.key("REPLACE"), ReplaceMutatorTemplate::new);
stageRegistry.register(addon.key("REPLACE_LIST"), ReplaceListMutatorTemplate::new);
stageRegistry.register(addon.key("BORDER"), BorderMutatorTemplate::new);
stageRegistry.register(addon.key("BORDER_LIST"), BorderListMutatorTemplate::new);
stageRegistry.register(addon.key("SMOOTH"), SmoothStageTemplate::new);
stageRegistry.register(addon.key("REPLACE"), ReplaceStageTemplate::new);
stageRegistry.register(addon.key("REPLACE_LIST"), ReplaceListStageTemplate::new);
stageRegistry.register(addon.key("BORDER"), BorderStageTemplate::new);
stageRegistry.register(addon.key("BORDER_LIST"), BorderListStageTemplate::new);
})
.failThrough();
platform.getEventManager()
@@ -85,12 +83,7 @@ public class BiomePipelineAddon implements AddonInitializer {
.register(addon, ConfigPackPostLoadEvent.class)
.then(event -> {
Registry<Biome> biomeRegistry = event.getPack().getRegistry(Biome.class);
event.getPack().applyLoader(BiomeDelegate.class, new BiomeDelegateLoader(biomeRegistry));
event.getPack().applyLoader(PipelineBiome.class, new PipelineBiomeLoader(biomeRegistry));
});
if(platform.getTerraConfig().isDebugLog())
logger.warn(
"The biome-provider-pipeline addon is deprecated and scheduled for removal in Terra 7.0. It is recommended to use the" +
" biome-provider-pipeline-v2 addon for future pack development instead.");
}
}
@@ -9,7 +9,7 @@ import com.dfsek.terra.api.world.biome.Biome;
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
class BiomePipelineColumn implements Column<Biome> {
public class BiomePipelineColumn implements Column<Biome> {
private final int min;
private final int max;
@@ -1,130 +0,0 @@
/*
* Copyright (c) 2020-2023 Polyhedral Development
*
* The Terra Core Addons are licensed under the terms of the MIT License. For more details,
* reference the LICENSE file in this module's root directory.
*/
package com.dfsek.terra.addons.biome.pipeline;
import com.github.benmanes.caffeine.cache.Caffeine;
import com.github.benmanes.caffeine.cache.LoadingCache;
import java.util.Comparator;
import java.util.HashSet;
import java.util.Optional;
import java.util.Set;
import java.util.stream.StreamSupport;
import com.dfsek.terra.addons.biome.pipeline.api.BiomeHolder;
import com.dfsek.terra.addons.biome.pipeline.api.delegate.BiomeDelegate;
import com.dfsek.terra.addons.biome.pipeline.api.stage.Stage;
import com.dfsek.terra.api.noise.NoiseSampler;
import com.dfsek.terra.api.registry.key.StringIdentifiable;
import com.dfsek.terra.api.util.Column;
import com.dfsek.terra.api.world.biome.Biome;
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
public class BiomePipelineProvider implements BiomeProvider {
private final LoadingCache<SeededVector, BiomeHolder> holderCache;
private final BiomePipeline pipeline;
private final int resolution;
private final NoiseSampler mutator;
private final double noiseAmp;
private final Set<Biome> biomes;
public BiomePipelineProvider(BiomePipeline pipeline, int resolution, NoiseSampler mutator, double noiseAmp) {
this.resolution = resolution;
this.mutator = mutator;
this.noiseAmp = noiseAmp;
holderCache = Caffeine.newBuilder()
.maximumSize(1024)
.build(key -> pipeline.getBiomes(key.x, key.z, key.seed));
this.pipeline = pipeline;
Set<BiomeDelegate> biomeSet = new HashSet<>();
pipeline.getSource().getBiomes().forEach(biomeSet::add);
Iterable<BiomeDelegate> result = biomeSet;
for(Stage stage : pipeline.getStages()) {
result = stage.getBiomes(result); // pass through all stages
}
this.biomes = new HashSet<>();
Iterable<BiomeDelegate> finalResult = result;
result.forEach(biomeDelegate -> {
if(biomeDelegate.isEphemeral()) {
StringBuilder biomeList = new StringBuilder("\n");
StreamSupport.stream(finalResult.spliterator(), false)
.sorted(Comparator.comparing(StringIdentifiable::getID))
.forEach(delegate -> biomeList
.append(" - ")
.append(delegate.getID())
.append(':')
.append(delegate.getClass().getCanonicalName())
.append('\n'));
throw new IllegalArgumentException("Biome Pipeline leaks ephemeral biome \"" + biomeDelegate.getID() +
"\". Ensure there is a stage to guarantee replacement of the ephemeral biome. Biomes: " +
biomeList);
}
this.biomes.add(biomeDelegate.getBiome());
});
}
@Override
public Biome getBiome(int x, int y, int z, long seed) {
return getBiome(x, z, seed);
}
public Biome getBiome(int x, int z, long seed) {
x += mutator.noise(seed + 1, x, z) * noiseAmp;
z += mutator.noise(seed + 2, x, z) * noiseAmp;
x /= resolution;
z /= resolution;
int fdX = Math.floorDiv(x, pipeline.getSize());
int fdZ = Math.floorDiv(z, pipeline.getSize());
return holderCache.get(new SeededVector(fdX, fdZ, seed)).getBiome(x - fdX * pipeline.getSize(),
z - fdZ * pipeline.getSize()).getBiome();
}
@Override
public Optional<Biome> getBaseBiome(int x, int z, long seed) {
return Optional.of(getBiome(x, z, seed));
}
@Override
public Iterable<Biome> getBiomes() {
return biomes;
}
@Override
public Column<Biome> getColumn(int x, int z, long seed, int min, int max) {
return new BiomePipelineColumn(this, min, max, x, z, seed);
}
@Override
public int resolution() {
return resolution;
}
private record SeededVector(int x, int z, long seed) {
@Override
public boolean equals(Object obj) {
if(obj instanceof SeededVector that) {
return this.z == that.z && this.x == that.x && this.seed == that.seed;
}
return false;
}
@Override
public int hashCode() {
int code = x;
code = 31 * code + z;
return 31 * code + ((int) (seed ^ (seed >>> 32)));
}
}
}
@@ -1,5 +1,13 @@
package com.dfsek.terra.addons.biome.pipeline.v2;
/*
* Copyright (c) 2020-2025 Polyhedral Development
*
* The Terra Core Addons are licensed under the terms of the MIT License. For more details,
* reference the LICENSE file in this module's root directory.
*/
package com.dfsek.terra.addons.biome.pipeline;
import com.dfsek.seismic.type.sampler.Sampler;
import com.github.benmanes.caffeine.cache.Caffeine;
import com.github.benmanes.caffeine.cache.LoadingCache;
@@ -9,28 +17,27 @@ import java.util.Optional;
import java.util.Set;
import java.util.stream.StreamSupport;
import com.dfsek.terra.addons.biome.pipeline.v2.api.BiomeChunk;
import com.dfsek.terra.addons.biome.pipeline.v2.api.Pipeline;
import com.dfsek.terra.addons.biome.pipeline.v2.api.SeededVector;
import com.dfsek.terra.addons.biome.pipeline.v2.api.Stage;
import com.dfsek.terra.addons.biome.pipeline.v2.api.biome.PipelineBiome;
import com.dfsek.terra.api.noise.NoiseSampler;
import com.dfsek.terra.addons.biome.pipeline.api.BiomeChunk;
import com.dfsek.terra.addons.biome.pipeline.api.Pipeline;
import com.dfsek.terra.addons.biome.pipeline.api.Stage;
import com.dfsek.terra.addons.biome.pipeline.api.biome.PipelineBiome;
import com.dfsek.terra.api.registry.key.StringIdentifiable;
import com.dfsek.terra.api.util.Column;
import com.dfsek.terra.api.util.cache.SeededVector2Key;
import com.dfsek.terra.api.world.biome.Biome;
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
public class PipelineBiomeProvider implements BiomeProvider {
private final LoadingCache<SeededVector, BiomeChunk> biomeChunkCache;
private final LoadingCache<SeededVector2Key, BiomeChunk> biomeChunkCache;
private final int chunkSize;
private final int resolution;
private final NoiseSampler mutator;
private final Sampler mutator;
private final double noiseAmp;
private final Set<Biome> biomes;
public PipelineBiomeProvider(Pipeline pipeline, int resolution, NoiseSampler mutator, double noiseAmp) {
public PipelineBiomeProvider(Pipeline pipeline, int resolution, Sampler mutator, double noiseAmp) {
this.resolution = resolution;
this.mutator = mutator;
this.noiseAmp = noiseAmp;
@@ -75,8 +82,8 @@ public class PipelineBiomeProvider implements BiomeProvider {
public Biome getBiome(int x, int z, long seed) {
x += mutator.noise(seed + 1, x, z) * noiseAmp;
z += mutator.noise(seed + 2, x, z) * noiseAmp;
x += (int) (mutator.getSample(seed + 1, x, z) * noiseAmp);
z += (int) (mutator.getSample(seed + 2, x, z) * noiseAmp);
x /= resolution;
z /= resolution;
@@ -90,7 +97,7 @@ public class PipelineBiomeProvider implements BiomeProvider {
int xInChunk = x - chunkWorldX;
int zInChunk = z - chunkWorldZ;
return biomeChunkCache.get(new SeededVector(seed, chunkWorldX, chunkWorldZ)).get(xInChunk, zInChunk).getBiome();
return biomeChunkCache.get(new SeededVector2Key(chunkWorldX, chunkWorldZ, seed)).get(xInChunk, zInChunk).getBiome();
}
@Override
@@ -0,0 +1,10 @@
package com.dfsek.terra.addons.biome.pipeline.api;
import com.dfsek.terra.addons.biome.pipeline.api.biome.PipelineBiome;
public interface BiomeChunk {
PipelineBiome get(int xInChunk, int zInChunk);
}
@@ -1,26 +0,0 @@
/*
* Copyright (c) 2020-2023 Polyhedral Development
*
* The Terra Core Addons are licensed under the terms of the MIT License. For more details,
* reference the LICENSE file in this module's root directory.
*/
package com.dfsek.terra.addons.biome.pipeline.api;
import com.dfsek.terra.addons.biome.pipeline.api.delegate.BiomeDelegate;
import com.dfsek.terra.addons.biome.pipeline.api.stage.type.BiomeExpander;
import com.dfsek.terra.addons.biome.pipeline.api.stage.type.BiomeMutator;
import com.dfsek.terra.addons.biome.pipeline.source.BiomeSource;
public interface BiomeHolder {
BiomeHolder expand(BiomeExpander expander, long seed);
void mutate(BiomeMutator mutator, long seed);
void fill(BiomeSource source, long seed);
BiomeDelegate getBiome(int x, int z);
BiomeDelegate getBiomeRaw(int x, int z);
}
@@ -1,7 +1,7 @@
package com.dfsek.terra.addons.biome.pipeline.v2.api;
package com.dfsek.terra.addons.biome.pipeline.api;
import com.dfsek.terra.addons.biome.pipeline.v2.api.biome.PipelineBiome;
import com.dfsek.terra.addons.biome.pipeline.v2.pipeline.BiomeChunkImpl.ViewPoint;
import com.dfsek.terra.addons.biome.pipeline.api.biome.PipelineBiome;
import com.dfsek.terra.addons.biome.pipeline.pipeline.BiomeChunkImpl;
/**
@@ -10,7 +10,7 @@ import com.dfsek.terra.addons.biome.pipeline.v2.pipeline.BiomeChunkImpl.ViewPoin
*/
public interface Expander extends Stage {
PipelineBiome fillBiome(ViewPoint viewPoint);
PipelineBiome fillBiome(BiomeChunkImpl.ViewPoint viewPoint);
@Override
default int maxRelativeReadDistance() {
@@ -18,7 +18,7 @@ public interface Expander extends Stage {
}
@Override
default PipelineBiome apply(ViewPoint viewPoint) {
default PipelineBiome apply(BiomeChunkImpl.ViewPoint viewPoint) {
PipelineBiome currentBiome = viewPoint.getBiome();
if(currentBiome == null) {
return fillBiome(viewPoint);
@@ -0,0 +1,16 @@
package com.dfsek.terra.addons.biome.pipeline.api;
import java.util.List;
import com.dfsek.terra.api.util.cache.SeededVector2Key;
public interface Pipeline {
BiomeChunk generateChunk(SeededVector2Key worldCoordinates);
int getChunkSize();
Source getSource();
List<Stage> getStages();
}
@@ -0,0 +1,11 @@
package com.dfsek.terra.addons.biome.pipeline.api;
import com.dfsek.terra.addons.biome.pipeline.api.biome.PipelineBiome;
public interface Source {
PipelineBiome get(long seed, int x, int z);
Iterable<PipelineBiome> getBiomes();
}
@@ -0,0 +1,15 @@
package com.dfsek.terra.addons.biome.pipeline.api;
import com.dfsek.terra.addons.biome.pipeline.api.biome.PipelineBiome;
import com.dfsek.terra.addons.biome.pipeline.pipeline.BiomeChunkImpl;
public interface Stage {
PipelineBiome apply(BiomeChunkImpl.ViewPoint viewPoint);
int maxRelativeReadDistance();
default Iterable<PipelineBiome> getBiomes(Iterable<PipelineBiome> biomes) {
return biomes;
}
}
@@ -1,4 +1,4 @@
package com.dfsek.terra.addons.biome.pipeline.v2.api.biome;
package com.dfsek.terra.addons.biome.pipeline.api.biome;
import java.util.Set;
@@ -1,4 +1,4 @@
package com.dfsek.terra.addons.biome.pipeline.v2.api.biome;
package com.dfsek.terra.addons.biome.pipeline.api.biome;
import java.util.Set;
@@ -1,4 +1,4 @@
package com.dfsek.terra.addons.biome.pipeline.v2.api.biome;
package com.dfsek.terra.addons.biome.pipeline.api.biome;
import java.util.HashSet;
import java.util.Set;
@@ -1,4 +1,4 @@
package com.dfsek.terra.addons.biome.pipeline.v2.api.biome;
package com.dfsek.terra.addons.biome.pipeline.api.biome;
import java.util.Collections;
import java.util.Set;
@@ -1,35 +0,0 @@
package com.dfsek.terra.addons.biome.pipeline.api.delegate;
import java.util.Set;
import com.dfsek.terra.api.registry.key.StringIdentifiable;
import com.dfsek.terra.api.world.biome.Biome;
public interface BiomeDelegate extends StringIdentifiable {
static BiomeDelegate ephemeral(String id) {
return new EphemeralBiomeDelegate(id);
}
static BiomeDelegate from(Biome biome) {
return new DelegatedBiome(biome);
}
static BiomeDelegate self() {
return SelfDelegate.INSTANCE;
}
Biome getBiome();
Set<String> getTags();
default boolean isEphemeral() {
return false;
}
default boolean isSelf() {
return false;
}
}
@@ -1,40 +0,0 @@
package com.dfsek.terra.addons.biome.pipeline.api.delegate;
import java.util.Set;
import com.dfsek.terra.api.world.biome.Biome;
final class DelegatedBiome implements BiomeDelegate {
private final Biome biome;
public DelegatedBiome(Biome biome) {
this.biome = biome;
}
@Override
public Biome getBiome() {
return biome;
}
@Override
public int hashCode() {
return biome.hashCode();
}
@Override
public boolean equals(Object obj) {
if(!(obj instanceof DelegatedBiome that)) return false;
return that.biome.equals(this.biome);
}
@Override
public Set<String> getTags() {
return biome.getTags();
}
@Override
public String getID() {
return biome.getID();
}
}
@@ -1,51 +0,0 @@
package com.dfsek.terra.addons.biome.pipeline.api.delegate;
import java.util.HashSet;
import java.util.Set;
import com.dfsek.terra.api.world.biome.Biome;
final class EphemeralBiomeDelegate implements BiomeDelegate {
private final Set<String> tags;
private final String id;
public EphemeralBiomeDelegate(String id) {
this.id = id;
tags = new HashSet<>();
tags.add(id);
tags.add("ALL");
}
@Override
public Biome getBiome() {
throw new UnsupportedOperationException("Cannot get biome from ephemeral delegate");
}
@Override
public Set<String> getTags() {
return tags;
}
@Override
public String getID() {
return id;
}
@Override
public boolean isEphemeral() {
return true;
}
@Override
public int hashCode() {
return id.hashCode();
}
@Override
public boolean equals(Object obj) {
if(!(obj instanceof EphemeralBiomeDelegate that)) return false;
return this.id.equals(that.id);
}
}
@@ -1,40 +0,0 @@
package com.dfsek.terra.addons.biome.pipeline.api.delegate;
import com.dfsek.terra.api.world.biome.Biome;
import java.util.Collections;
import java.util.Set;
final class SelfDelegate implements BiomeDelegate {
public static final SelfDelegate INSTANCE = new SelfDelegate();
private SelfDelegate() {
}
@Override
public Biome getBiome() {
throw new UnsupportedOperationException("Cannot get biome from self delegate");
}
@Override
public boolean isSelf() {
return true;
}
@Override
public boolean isEphemeral() {
return true;
}
@Override
public Set<String> getTags() {
return Collections.emptySet();
}
@Override
public String getID() {
return "SELF";
}
}
@@ -1,20 +0,0 @@
/*
* Copyright (c) 2020-2023 Polyhedral Development
*
* The Terra Core Addons are licensed under the terms of the MIT License. For more details,
* reference the LICENSE file in this module's root directory.
*/
package com.dfsek.terra.addons.biome.pipeline.api.stage;
import com.dfsek.terra.addons.biome.pipeline.api.BiomeHolder;
import com.dfsek.terra.addons.biome.pipeline.api.delegate.BiomeDelegate;
public interface Stage {
BiomeHolder apply(BiomeHolder in, long seed);
boolean isExpansion();
Iterable<BiomeDelegate> getBiomes(Iterable<BiomeDelegate> biomes);
}
@@ -1,15 +0,0 @@
/*
* Copyright (c) 2020-2023 Polyhedral Development
*
* The Terra Core Addons are licensed under the terms of the MIT License. For more details,
* reference the LICENSE file in this module's root directory.
*/
package com.dfsek.terra.addons.biome.pipeline.api.stage.type;
import com.dfsek.terra.addons.biome.pipeline.api.delegate.BiomeDelegate;
public interface BiomeExpander {
BiomeDelegate getBetween(double x, double z, long seed, BiomeDelegate... others);
}
@@ -1,37 +0,0 @@
/*
* Copyright (c) 2020-2023 Polyhedral Development
*
* The Terra Core Addons are licensed under the terms of the MIT License. For more details,
* reference the LICENSE file in this module's root directory.
*/
package com.dfsek.terra.addons.biome.pipeline.api.stage.type;
import com.dfsek.terra.addons.biome.pipeline.api.BiomeHolder;
import com.dfsek.terra.addons.biome.pipeline.api.delegate.BiomeDelegate;
public interface BiomeMutator {
BiomeDelegate mutate(ViewPoint viewPoint, double x, double z, long seed);
default Iterable<BiomeDelegate> getBiomes(Iterable<BiomeDelegate> biomes) {
return biomes;
}
class ViewPoint {
private final BiomeHolder biomes;
private final int offX;
private final int offZ;
public ViewPoint(BiomeHolder biomes, int offX, int offZ) {
this.biomes = biomes;
this.offX = offX;
this.offZ = offZ;
}
public BiomeDelegate getBiome(int x, int z) {
return biomes.getBiomeRaw(x + offX, z + offZ);
}
}
}
@@ -1,32 +0,0 @@
package com.dfsek.terra.addons.biome.pipeline.config;
import com.dfsek.tectonic.api.depth.DepthTracker;
import com.dfsek.tectonic.api.exception.LoadException;
import com.dfsek.tectonic.api.loader.ConfigLoader;
import com.dfsek.tectonic.api.loader.type.TypeLoader;
import org.jetbrains.annotations.NotNull;
import java.lang.reflect.AnnotatedType;
import com.dfsek.terra.addons.biome.pipeline.api.delegate.BiomeDelegate;
import com.dfsek.terra.api.registry.Registry;
import com.dfsek.terra.api.world.biome.Biome;
public class BiomeDelegateLoader implements TypeLoader<BiomeDelegate> {
private final Registry<Biome> biomeRegistry;
public BiomeDelegateLoader(Registry<Biome> biomeRegistry) {
this.biomeRegistry = biomeRegistry;
}
@Override
public BiomeDelegate load(@NotNull AnnotatedType t, @NotNull Object c, @NotNull ConfigLoader loader, DepthTracker depthTracker)
throws LoadException {
if(c.equals("SELF")) return BiomeDelegate.self();
return biomeRegistry
.getByID((String) c)
.map(BiomeDelegate::from)
.orElseGet(() -> BiomeDelegate.ephemeral((String) c));
}
}
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2020-2023 Polyhedral Development
* Copyright (c) 2020-2025 Polyhedral Development
*
* The Terra Core Addons are licensed under the terms of the MIT License. For more details,
* reference the LICENSE file in this module's root directory.
@@ -7,48 +7,49 @@
package com.dfsek.terra.addons.biome.pipeline.config;
import com.dfsek.seismic.type.sampler.Sampler;
import com.dfsek.tectonic.api.config.template.annotations.Default;
import com.dfsek.tectonic.api.config.template.annotations.Description;
import com.dfsek.tectonic.api.config.template.annotations.Value;
import com.dfsek.tectonic.api.config.template.object.ObjectTemplate;
import java.util.List;
import com.dfsek.terra.addons.biome.pipeline.BiomePipeline;
import com.dfsek.terra.addons.biome.pipeline.BiomePipelineProvider;
import com.dfsek.terra.addons.biome.pipeline.api.stage.Stage;
import com.dfsek.terra.addons.biome.pipeline.source.BiomeSource;
import com.dfsek.terra.addons.biome.pipeline.PipelineBiomeProvider;
import com.dfsek.terra.addons.biome.pipeline.api.Source;
import com.dfsek.terra.addons.biome.pipeline.api.Stage;
import com.dfsek.terra.addons.biome.pipeline.pipeline.PipelineImpl;
import com.dfsek.terra.api.config.meta.Meta;
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
@SuppressWarnings({ "FieldMayBeFinal", "unused" })
public class BiomePipelineTemplate extends BiomeProviderTemplate {
@Value("pipeline.initial-size")
public class BiomePipelineTemplate implements ObjectTemplate<BiomeProvider> {
@Value("resolution")
@Default
@Description("""
The initial size of biome chunks. This value must be at least 2.
<b>This is not the final size of biome chunks. Final chunks will be much larger</b>.
The resolution at which to sample biomes.
It is recommended to keep biome chunks' final size in the range of [50, 300]
to prevent performance issues. To calculate the size of biome chunks, simply
take initial-size and for each expand stage, multiply the running value by 2
and subtract 1. (The size is also printed to the server console if you
have debug mode enabled)""")
private @Meta int initialSize = 2;
Larger values are quadratically faster, but produce lower quality results.
For example, a value of 3 would sample every 3 blocks.""")
protected @Meta int resolution = 1;
@Value("blend.sampler")
@Default
@Description("A sampler to use for blending the edges of biomes via domain warping.")
protected @Meta Sampler blendSampler = Sampler.zero();
@Value("blend.amplitude")
@Default
@Description("The amplitude at which to perform blending.")
protected @Meta double blendAmplitude = 0d;
@Value("pipeline.source")
@Description("The Biome Source to use for initial population of biomes.")
private @Meta BiomeSource source;
private @Meta Source source;
@Value("pipeline.stages")
@Description("A list of pipeline stages to apply to the result of #source")
private @Meta List<@Meta Stage> stages;
@Override
public BiomeProvider get() {
BiomePipeline.BiomePipelineBuilder biomePipelineBuilder = new BiomePipeline.BiomePipelineBuilder(initialSize);
stages.forEach(biomePipelineBuilder::addStage);
BiomePipeline pipeline = biomePipelineBuilder.build(source);
return new BiomePipelineProvider(pipeline, resolution, blend, blendAmp);
return new PipelineBiomeProvider(new PipelineImpl(source, stages, resolution, 128), resolution, blendSampler, blendAmplitude);
}
}
@@ -1,37 +0,0 @@
/*
* Copyright (c) 2020-2023 Polyhedral Development
*
* The Terra Core Addons are licensed under the terms of the MIT License. For more details,
* reference the LICENSE file in this module's root directory.
*/
package com.dfsek.terra.addons.biome.pipeline.config;
import com.dfsek.tectonic.api.config.template.annotations.Default;
import com.dfsek.tectonic.api.config.template.annotations.Description;
import com.dfsek.tectonic.api.config.template.annotations.Value;
import com.dfsek.tectonic.api.config.template.object.ObjectTemplate;
import com.dfsek.terra.api.config.meta.Meta;
import com.dfsek.terra.api.noise.NoiseSampler;
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
public abstract class BiomeProviderTemplate implements ObjectTemplate<BiomeProvider> {
@Value("resolution")
@Default
@Description("""
The resolution at which to sample biomes.
Larger values are quadratically faster, but produce lower quality results.
For example, a value of 3 would sample every 3 blocks.""")
protected @Meta int resolution = 1;
@Value("blend.sampler")
@Default
@Description("A sampler to use for blending the edges of biomes via domain warping.")
protected @Meta NoiseSampler blend = NoiseSampler.zero();
@Value("blend.amplitude")
@Default
@Description("The amplitude at which to perform blending.")
protected @Meta double blendAmp = 0d;
}
@@ -1,4 +1,4 @@
package com.dfsek.terra.addons.biome.pipeline.v2.config;
package com.dfsek.terra.addons.biome.pipeline.config;
import com.dfsek.tectonic.api.depth.DepthTracker;
import com.dfsek.tectonic.api.exception.LoadException;
@@ -8,7 +8,7 @@ import org.jetbrains.annotations.NotNull;
import java.lang.reflect.AnnotatedType;
import com.dfsek.terra.addons.biome.pipeline.v2.api.biome.PipelineBiome;
import com.dfsek.terra.addons.biome.pipeline.api.biome.PipelineBiome;
import com.dfsek.terra.api.registry.Registry;
import com.dfsek.terra.api.world.biome.Biome;
@@ -1,34 +0,0 @@
/*
* Copyright (c) 2020-2023 Polyhedral Development
*
* The Terra Core Addons are licensed under the terms of the MIT License. For more details,
* reference the LICENSE file in this module's root directory.
*/
package com.dfsek.terra.addons.biome.pipeline.config;
import com.dfsek.tectonic.api.config.template.annotations.Description;
import com.dfsek.tectonic.api.config.template.annotations.Value;
import com.dfsek.terra.addons.biome.pipeline.api.delegate.BiomeDelegate;
import com.dfsek.terra.addons.biome.pipeline.source.BiomeSource;
import com.dfsek.terra.addons.biome.pipeline.source.SamplerSource;
import com.dfsek.terra.api.config.meta.Meta;
import com.dfsek.terra.api.noise.NoiseSampler;
import com.dfsek.terra.api.util.collection.ProbabilityCollection;
public class SamplerSourceTemplate extends SourceTemplate {
@Value("sampler")
@Description("The sampler used to distribute biomes.")
private @Meta NoiseSampler noise;
@Value("biomes")
@Description("The biomes to be distributed.")
private @Meta ProbabilityCollection<@Meta BiomeDelegate> biomes;
@Override
public BiomeSource get() {
return new SamplerSource(biomes, noise);
}
}
@@ -1,17 +0,0 @@
/*
* Copyright (c) 2020-2023 Polyhedral Development
*
* The Terra Core Addons are licensed under the terms of the MIT License. For more details,
* reference the LICENSE file in this module's root directory.
*/
package com.dfsek.terra.addons.biome.pipeline.config;
import com.dfsek.tectonic.api.config.template.object.ObjectTemplate;
import com.dfsek.terra.addons.biome.pipeline.source.BiomeSource;
public abstract class SourceTemplate implements ObjectTemplate<BiomeSource> {
}
@@ -1,27 +1,27 @@
/*
* Copyright (c) 2020-2023 Polyhedral Development
* Copyright (c) 2020-2025 Polyhedral Development
*
* The Terra Core Addons are licensed under the terms of the MIT License. For more details,
* reference the LICENSE file in this module's root directory.
*/
package com.dfsek.terra.addons.biome.pipeline.v2.config.source;
package com.dfsek.terra.addons.biome.pipeline.config.source;
import com.dfsek.seismic.type.sampler.Sampler;
import com.dfsek.tectonic.api.config.template.annotations.Description;
import com.dfsek.tectonic.api.config.template.annotations.Value;
import com.dfsek.terra.addons.biome.pipeline.v2.api.Source;
import com.dfsek.terra.addons.biome.pipeline.v2.api.biome.PipelineBiome;
import com.dfsek.terra.addons.biome.pipeline.v2.source.SamplerSource;
import com.dfsek.terra.addons.biome.pipeline.api.Source;
import com.dfsek.terra.addons.biome.pipeline.api.biome.PipelineBiome;
import com.dfsek.terra.addons.biome.pipeline.source.SamplerSource;
import com.dfsek.terra.api.config.meta.Meta;
import com.dfsek.terra.api.noise.NoiseSampler;
import com.dfsek.terra.api.util.collection.ProbabilityCollection;
public class SamplerSourceTemplate extends SourceTemplate {
@Value("sampler")
@Description("The sampler used to distribute biomes.")
private @Meta NoiseSampler noise;
private @Meta Sampler noise;
@Value("biomes")
@Description("The biomes to be distributed.")
@@ -1,15 +1,15 @@
/*
* Copyright (c) 2020-2023 Polyhedral Development
* Copyright (c) 2020-2025 Polyhedral Development
*
* The Terra Core Addons are licensed under the terms of the MIT License. For more details,
* reference the LICENSE file in this module's root directory.
*/
package com.dfsek.terra.addons.biome.pipeline.v2.config.source;
package com.dfsek.terra.addons.biome.pipeline.config.source;
import com.dfsek.tectonic.api.config.template.object.ObjectTemplate;
import com.dfsek.terra.addons.biome.pipeline.v2.api.Source;
import com.dfsek.terra.addons.biome.pipeline.api.Source;
public abstract class SourceTemplate implements ObjectTemplate<Source> {
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2020-2023 Polyhedral Development
* Copyright (c) 2020-2025 Polyhedral Development
*
* The Terra Core Addons are licensed under the terms of the MIT License. For more details,
* reference the LICENSE file in this module's root directory.
@@ -7,17 +7,17 @@
package com.dfsek.terra.addons.biome.pipeline.config.stage;
import com.dfsek.seismic.type.sampler.Sampler;
import com.dfsek.tectonic.api.config.template.annotations.Description;
import com.dfsek.tectonic.api.config.template.annotations.Value;
import com.dfsek.tectonic.api.config.template.object.ObjectTemplate;
import com.dfsek.terra.addons.biome.pipeline.api.stage.Stage;
import com.dfsek.terra.addons.biome.pipeline.api.Stage;
import com.dfsek.terra.api.config.meta.Meta;
import com.dfsek.terra.api.noise.NoiseSampler;
public abstract class StageTemplate implements ObjectTemplate<Stage> {
@Value("sampler")
@Description("Sampler to use for stage distribution.")
protected @Meta NoiseSampler noise;
protected @Meta Sampler noise;
}
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2020-2023 Polyhedral Development
* Copyright (c) 2020-2025 Polyhedral Development
*
* The Terra Core Addons are licensed under the terms of the MIT License. For more details,
* reference the LICENSE file in this module's root directory.
@@ -7,15 +7,14 @@
package com.dfsek.terra.addons.biome.pipeline.config.stage.expander;
import com.dfsek.terra.addons.biome.pipeline.api.stage.Stage;
import com.dfsek.terra.addons.biome.pipeline.api.Expander;
import com.dfsek.terra.addons.biome.pipeline.config.stage.StageTemplate;
import com.dfsek.terra.addons.biome.pipeline.expand.FractalExpander;
import com.dfsek.terra.addons.biome.pipeline.stages.ExpanderStage;
import com.dfsek.terra.addons.biome.pipeline.stage.expander.FractalExpander;
public class ExpanderStageTemplate extends StageTemplate {
@Override
public Stage get() {
return new ExpanderStage(new FractalExpander(noise));
public Expander get() {
return new FractalExpander(noise);
}
}
@@ -1,42 +0,0 @@
/*
* Copyright (c) 2020-2023 Polyhedral Development
*
* The Terra Core Addons are licensed under the terms of the MIT License. For more details,
* reference the LICENSE file in this module's root directory.
*/
package com.dfsek.terra.addons.biome.pipeline.config.stage.mutator;
import com.dfsek.tectonic.api.config.template.annotations.Value;
import java.util.Map;
import com.dfsek.terra.addons.biome.pipeline.api.delegate.BiomeDelegate;
import com.dfsek.terra.addons.biome.pipeline.api.stage.Stage;
import com.dfsek.terra.addons.biome.pipeline.config.stage.StageTemplate;
import com.dfsek.terra.addons.biome.pipeline.mutator.BorderListMutator;
import com.dfsek.terra.addons.biome.pipeline.stages.MutatorStage;
import com.dfsek.terra.api.config.meta.Meta;
import com.dfsek.terra.api.util.collection.ProbabilityCollection;
@SuppressWarnings("unused")
public class BorderListMutatorTemplate extends StageTemplate {
@Value("from")
private @Meta String from;
@Value("default-replace")
private @Meta String defaultReplace;
@Value("default-to")
private @Meta ProbabilityCollection<@Meta BiomeDelegate> defaultTo;
@Value("replace")
private @Meta Map<@Meta BiomeDelegate, @Meta ProbabilityCollection<@Meta BiomeDelegate>> replace;
@Override
public Stage get() {
return new MutatorStage(new BorderListMutator(replace, from, defaultReplace, noise, defaultTo));
}
}
@@ -1,20 +1,20 @@
/*
* Copyright (c) 2020-2023 Polyhedral Development
* Copyright (c) 2020-2025 Polyhedral Development
*
* The Terra Core Addons are licensed under the terms of the MIT License. For more details,
* reference the LICENSE file in this module's root directory.
*/
package com.dfsek.terra.addons.biome.pipeline.v2.config.stage.mutator;
package com.dfsek.terra.addons.biome.pipeline.config.stage.mutator;
import com.dfsek.tectonic.api.config.template.annotations.Value;
import java.util.Map;
import com.dfsek.terra.addons.biome.pipeline.v2.api.Stage;
import com.dfsek.terra.addons.biome.pipeline.v2.api.biome.PipelineBiome;
import com.dfsek.terra.addons.biome.pipeline.v2.config.stage.StageTemplate;
import com.dfsek.terra.addons.biome.pipeline.v2.stage.mutators.BorderListStage;
import com.dfsek.terra.addons.biome.pipeline.api.Stage;
import com.dfsek.terra.addons.biome.pipeline.api.biome.PipelineBiome;
import com.dfsek.terra.addons.biome.pipeline.config.stage.StageTemplate;
import com.dfsek.terra.addons.biome.pipeline.stage.mutators.BorderListStage;
import com.dfsek.terra.api.config.meta.Meta;
import com.dfsek.terra.api.util.collection.ProbabilityCollection;
@@ -1,36 +0,0 @@
/*
* Copyright (c) 2020-2023 Polyhedral Development
*
* The Terra Core Addons are licensed under the terms of the MIT License. For more details,
* reference the LICENSE file in this module's root directory.
*/
package com.dfsek.terra.addons.biome.pipeline.config.stage.mutator;
import com.dfsek.tectonic.api.config.template.annotations.Value;
import com.dfsek.terra.addons.biome.pipeline.api.delegate.BiomeDelegate;
import com.dfsek.terra.addons.biome.pipeline.api.stage.Stage;
import com.dfsek.terra.addons.biome.pipeline.config.stage.StageTemplate;
import com.dfsek.terra.addons.biome.pipeline.mutator.BorderMutator;
import com.dfsek.terra.addons.biome.pipeline.stages.MutatorStage;
import com.dfsek.terra.api.config.meta.Meta;
import com.dfsek.terra.api.util.collection.ProbabilityCollection;
@SuppressWarnings("unused")
public class BorderMutatorTemplate extends StageTemplate {
@Value("from")
private @Meta String from;
@Value("replace")
private @Meta String replace;
@Value("to")
private @Meta ProbabilityCollection<@Meta BiomeDelegate> to;
@Override
public Stage get() {
return new MutatorStage(new BorderMutator(from, replace, noise, to));
}
}
@@ -1,18 +1,18 @@
/*
* Copyright (c) 2020-2023 Polyhedral Development
* Copyright (c) 2020-2025 Polyhedral Development
*
* The Terra Core Addons are licensed under the terms of the MIT License. For more details,
* reference the LICENSE file in this module's root directory.
*/
package com.dfsek.terra.addons.biome.pipeline.v2.config.stage.mutator;
package com.dfsek.terra.addons.biome.pipeline.config.stage.mutator;
import com.dfsek.tectonic.api.config.template.annotations.Value;
import com.dfsek.terra.addons.biome.pipeline.v2.api.Stage;
import com.dfsek.terra.addons.biome.pipeline.v2.api.biome.PipelineBiome;
import com.dfsek.terra.addons.biome.pipeline.v2.config.stage.StageTemplate;
import com.dfsek.terra.addons.biome.pipeline.v2.stage.mutators.BorderStage;
import com.dfsek.terra.addons.biome.pipeline.api.Stage;
import com.dfsek.terra.addons.biome.pipeline.api.biome.PipelineBiome;
import com.dfsek.terra.addons.biome.pipeline.config.stage.StageTemplate;
import com.dfsek.terra.addons.biome.pipeline.stage.mutators.BorderStage;
import com.dfsek.terra.api.config.meta.Meta;
import com.dfsek.terra.api.util.collection.ProbabilityCollection;
@@ -1,38 +0,0 @@
/*
* Copyright (c) 2020-2023 Polyhedral Development
*
* The Terra Core Addons are licensed under the terms of the MIT License. For more details,
* reference the LICENSE file in this module's root directory.
*/
package com.dfsek.terra.addons.biome.pipeline.config.stage.mutator;
import com.dfsek.tectonic.api.config.template.annotations.Value;
import java.util.Map;
import com.dfsek.terra.addons.biome.pipeline.api.delegate.BiomeDelegate;
import com.dfsek.terra.addons.biome.pipeline.api.stage.Stage;
import com.dfsek.terra.addons.biome.pipeline.config.stage.StageTemplate;
import com.dfsek.terra.addons.biome.pipeline.mutator.ReplaceListMutator;
import com.dfsek.terra.addons.biome.pipeline.stages.MutatorStage;
import com.dfsek.terra.api.config.meta.Meta;
import com.dfsek.terra.api.util.collection.ProbabilityCollection;
@SuppressWarnings("unused")
public class ReplaceListMutatorTemplate extends StageTemplate {
@Value("default-from")
private @Meta String defaultFrom;
@Value("default-to")
private @Meta ProbabilityCollection<@Meta BiomeDelegate> defaultTo;
@Value("to")
private @Meta Map<@Meta BiomeDelegate, @Meta ProbabilityCollection<@Meta BiomeDelegate>> replace;
@Override
public Stage get() {
return new MutatorStage(new ReplaceListMutator(replace, defaultFrom, defaultTo, noise));
}
}
@@ -1,20 +1,20 @@
/*
* Copyright (c) 2020-2023 Polyhedral Development
* Copyright (c) 2020-2025 Polyhedral Development
*
* The Terra Core Addons are licensed under the terms of the MIT License. For more details,
* reference the LICENSE file in this module's root directory.
*/
package com.dfsek.terra.addons.biome.pipeline.v2.config.stage.mutator;
package com.dfsek.terra.addons.biome.pipeline.config.stage.mutator;
import com.dfsek.tectonic.api.config.template.annotations.Value;
import java.util.Map;
import com.dfsek.terra.addons.biome.pipeline.v2.api.Stage;
import com.dfsek.terra.addons.biome.pipeline.v2.api.biome.PipelineBiome;
import com.dfsek.terra.addons.biome.pipeline.v2.config.stage.StageTemplate;
import com.dfsek.terra.addons.biome.pipeline.v2.stage.mutators.ReplaceListStage;
import com.dfsek.terra.addons.biome.pipeline.api.Stage;
import com.dfsek.terra.addons.biome.pipeline.api.biome.PipelineBiome;
import com.dfsek.terra.addons.biome.pipeline.config.stage.StageTemplate;
import com.dfsek.terra.addons.biome.pipeline.stage.mutators.ReplaceListStage;
import com.dfsek.terra.api.config.meta.Meta;
import com.dfsek.terra.api.util.collection.ProbabilityCollection;
@@ -1,33 +0,0 @@
/*
* Copyright (c) 2020-2023 Polyhedral Development
*
* The Terra Core Addons are licensed under the terms of the MIT License. For more details,
* reference the LICENSE file in this module's root directory.
*/
package com.dfsek.terra.addons.biome.pipeline.config.stage.mutator;
import com.dfsek.tectonic.api.config.template.annotations.Value;
import com.dfsek.terra.addons.biome.pipeline.api.delegate.BiomeDelegate;
import com.dfsek.terra.addons.biome.pipeline.api.stage.Stage;
import com.dfsek.terra.addons.biome.pipeline.config.stage.StageTemplate;
import com.dfsek.terra.addons.biome.pipeline.mutator.ReplaceMutator;
import com.dfsek.terra.addons.biome.pipeline.stages.MutatorStage;
import com.dfsek.terra.api.config.meta.Meta;
import com.dfsek.terra.api.util.collection.ProbabilityCollection;
@SuppressWarnings("unused")
public class ReplaceMutatorTemplate extends StageTemplate {
@Value("from")
private @Meta String from;
@Value("to")
private @Meta ProbabilityCollection<@Meta BiomeDelegate> to;
@Override
public Stage get() {
return new MutatorStage(new ReplaceMutator(from, to, noise));
}
}
@@ -1,18 +1,18 @@
/*
* Copyright (c) 2020-2023 Polyhedral Development
* Copyright (c) 2020-2025 Polyhedral Development
*
* The Terra Core Addons are licensed under the terms of the MIT License. For more details,
* reference the LICENSE file in this module's root directory.
*/
package com.dfsek.terra.addons.biome.pipeline.v2.config.stage.mutator;
package com.dfsek.terra.addons.biome.pipeline.config.stage.mutator;
import com.dfsek.tectonic.api.config.template.annotations.Value;
import com.dfsek.terra.addons.biome.pipeline.v2.api.Stage;
import com.dfsek.terra.addons.biome.pipeline.v2.api.biome.PipelineBiome;
import com.dfsek.terra.addons.biome.pipeline.v2.config.stage.StageTemplate;
import com.dfsek.terra.addons.biome.pipeline.v2.stage.mutators.ReplaceStage;
import com.dfsek.terra.addons.biome.pipeline.api.Stage;
import com.dfsek.terra.addons.biome.pipeline.api.biome.PipelineBiome;
import com.dfsek.terra.addons.biome.pipeline.config.stage.StageTemplate;
import com.dfsek.terra.addons.biome.pipeline.stage.mutators.ReplaceStage;
import com.dfsek.terra.api.config.meta.Meta;
import com.dfsek.terra.api.util.collection.ProbabilityCollection;
@@ -1,21 +0,0 @@
/*
* Copyright (c) 2020-2023 Polyhedral Development
*
* The Terra Core Addons are licensed under the terms of the MIT License. For more details,
* reference the LICENSE file in this module's root directory.
*/
package com.dfsek.terra.addons.biome.pipeline.config.stage.mutator;
import com.dfsek.terra.addons.biome.pipeline.api.stage.Stage;
import com.dfsek.terra.addons.biome.pipeline.config.stage.StageTemplate;
import com.dfsek.terra.addons.biome.pipeline.mutator.SmoothMutator;
import com.dfsek.terra.addons.biome.pipeline.stages.MutatorStage;
public class SmoothMutatorTemplate extends StageTemplate {
@Override
public Stage get() {
return new MutatorStage(new SmoothMutator(noise));
}
}
@@ -0,0 +1,20 @@
/*
* Copyright (c) 2020-2025 Polyhedral Development
*
* The Terra Core Addons are licensed under the terms of the MIT License. For more details,
* reference the LICENSE file in this module's root directory.
*/
package com.dfsek.terra.addons.biome.pipeline.config.stage.mutator;
import com.dfsek.terra.addons.biome.pipeline.api.Stage;
import com.dfsek.terra.addons.biome.pipeline.config.stage.StageTemplate;
import com.dfsek.terra.addons.biome.pipeline.stage.mutators.SmoothStage;
public class SmoothStageTemplate extends StageTemplate {
@Override
public Stage get() {
return new SmoothStage(noise);
}
}

Some files were not shown because too many files have changed in this diff Show More