diff --git a/gm4_gilded_gateways/README.md b/gm4_gilded_gateways/README.md
new file mode 100644
index 0000000000..fbaf0ce449
--- /dev/null
+++ b/gm4_gilded_gateways/README.md
@@ -0,0 +1,10 @@
+# Gilded Gateways
+
+Tired of boring bedrock end gateways? Bring back the magic with custom gateways!
+
+
+
+### Features
+- Swag out your end!
+- 3 Unique Gateway types for the main island
+- A secret 4th type for the outer end
diff --git a/gm4_gilded_gateways/beet.yaml b/gm4_gilded_gateways/beet.yaml
new file mode 100644
index 0000000000..fc219ec800
--- /dev/null
+++ b/gm4_gilded_gateways/beet.yaml
@@ -0,0 +1,29 @@
+id: gm4_gilded_gateways
+name: Gilded Gateways
+version: 1.0.X
+
+data_pack:
+ load: .
+
+pipeline:
+ - gm4.plugins.extend.module
+
+meta:
+ gm4:
+ versioning:
+ schedule_loops: [tick]
+ website:
+ description: Tired of boring bedrock end gateways? Bring back the magic with custom gateways!
+ recommended: []
+ notes: []
+ modrinth:
+ project_id: pJokm5M5
+ smithed:
+ pack_id: gm4_gilded_gateways
+ wiki: https://wiki.gm4.co/wiki/Gilded_Gateways
+ credits:
+ Creators:
+ - runcows
+ - Dinoguin_Jess
+ Icon Design:
+ - runcows
diff --git a/gm4_gilded_gateways/data/gm4_gilded_gateways/function/init.mcfunction b/gm4_gilded_gateways/data/gm4_gilded_gateways/function/init.mcfunction
new file mode 100644
index 0000000000..cfa54ab7fa
--- /dev/null
+++ b/gm4_gilded_gateways/data/gm4_gilded_gateways/function/init.mcfunction
@@ -0,0 +1,7 @@
+execute unless score gilded_gateways gm4_modules matches 1 run data modify storage gm4:log queue append value {type:"install",module:"Gilded Gateways"}
+execute unless score gilded_gateways gm4_earliest_version < gilded_gateways gm4_modules run scoreboard players operation gilded_gateways gm4_earliest_version = gilded_gateways gm4_modules
+scoreboard players set gilded_gateways gm4_modules 1
+
+scoreboard objectives add gm4_gilded_gateways dummy
+
+schedule function gm4_gilded_gateways:tick 1t
diff --git a/gm4_gilded_gateways/data/gm4_gilded_gateways/function/link.mcfunction b/gm4_gilded_gateways/data/gm4_gilded_gateways/function/link.mcfunction
new file mode 100644
index 0000000000..18739cb4d9
--- /dev/null
+++ b/gm4_gilded_gateways/data/gm4_gilded_gateways/function/link.mcfunction
@@ -0,0 +1,9 @@
+# @s = gateway marker of newly linked main island gateway
+# at @s
+# run from tick
+
+data modify entity @s data.gm4_gilded_gateways.exit.x set from block ~ ~ ~ exit_portal[0]
+data modify entity @s data.gm4_gilded_gateways.exit.y set from block ~ ~ ~ exit_portal[1]
+data modify entity @s data.gm4_gilded_gateways.exit.z set from block ~ ~ ~ exit_portal[2]
+
+function gm4_gilded_gateways:position with entity @s data.gm4_gilded_gateways.exit
diff --git a/gm4_gilded_gateways/data/gm4_gilded_gateways/function/place.mcfunction b/gm4_gilded_gateways/data/gm4_gilded_gateways/function/place.mcfunction
new file mode 100644
index 0000000000..7a4f759a35
--- /dev/null
+++ b/gm4_gilded_gateways/data/gm4_gilded_gateways/function/place.mcfunction
@@ -0,0 +1,20 @@
+# @s = gateway marker of newly linked main island gateway
+# at newly generated gateway on other side
+# run from position
+
+execute store success score #loaded gm4_gilded_gateways if loaded ~ ~ ~
+# if its not loaded, then its for sure not forceloaded, so we can blindly forceload
+execute if score #loaded gm4_gilded_gateways matches 0 run forceload add ~ ~
+
+execute unless block ~ ~ ~ end_gateway unless block ~ ~1 ~ bedrock run return fail
+
+# place
+execute if entity @s[tag=gm4_gilded_gateways.gateway.0] run place template gm4_gilded_gateways:postgen_0 ~-2 ~-4 ~-2
+execute if entity @s[tag=gm4_gilded_gateways.gateway.1] run place template gm4_gilded_gateways:postgen_1 ~-2 ~-4 ~-2
+execute if entity @s[tag=gm4_gilded_gateways.gateway.2] run place template gm4_gilded_gateways:postgen_2 ~-2 ~-4 ~-2
+
+# unforceload
+execute if score #loaded gm4_gilded_gateways matches 0 run forceload remove ~ ~
+
+# kill
+kill @s
diff --git a/gm4_gilded_gateways/data/gm4_gilded_gateways/function/position.mcfunction b/gm4_gilded_gateways/data/gm4_gilded_gateways/function/position.mcfunction
new file mode 100644
index 0000000000..c7c5226c0d
--- /dev/null
+++ b/gm4_gilded_gateways/data/gm4_gilded_gateways/function/position.mcfunction
@@ -0,0 +1,6 @@
+# @s = gateway marker of newly linked main island gateway
+# at @s
+# run from link
+# with $x, $y, $z: int coord positions
+
+$execute positioned $(x) $(y) $(z) positioned ~ ~0.5 ~ run function gm4_gilded_gateways:place
diff --git a/gm4_gilded_gateways/data/gm4_gilded_gateways/function/tick.mcfunction b/gm4_gilded_gateways/data/gm4_gilded_gateways/function/tick.mcfunction
new file mode 100644
index 0000000000..e33e766ede
--- /dev/null
+++ b/gm4_gilded_gateways/data/gm4_gilded_gateways/function/tick.mcfunction
@@ -0,0 +1,5 @@
+schedule function gm4_gilded_gateways:tick 1t
+
+execute in minecraft:the_end positioned 0 128 0 \
+ as @e[type=marker,tag=gm4_gilded_gateways.gateway,distance=..200] at @s \
+ if data block ~ ~ ~ exit_portal run function gm4_gilded_gateways:link
diff --git a/gm4_gilded_gateways/data/gm4_gilded_gateways/guidebook/gilded_gateways.json b/gm4_gilded_gateways/data/gm4_gilded_gateways/guidebook/gilded_gateways.json
new file mode 100644
index 0000000000..fcf81406f2
--- /dev/null
+++ b/gm4_gilded_gateways/data/gm4_gilded_gateways/guidebook/gilded_gateways.json
@@ -0,0 +1,44 @@
+{
+ "id": "gilded_gateways",
+ "name": "Gilded Gateways",
+ "module_type": "module",
+ "icon": {
+ "id": "minecraft:bedrock"
+ },
+ "criteria": {
+ "enter_gateway": {
+ "trigger": "minecraft:enter_block",
+ "conditions": {
+ "player": {
+ "type": "minecraft:location_check",
+ "predicate": {
+ "dimension": "minecraft:the_end"
+ }
+ },
+ "blocks": "minecraft:end_gateway"
+ }
+ }
+ },
+ "sections": [
+ {
+ "name": "display",
+ "enable": [],
+ "requirements": [
+ [
+ "enter_gateway"
+ ]
+ ],
+ "pages": [
+ [
+ {
+ "insert": "title"
+ },
+ {
+ "translate": "text.gm4.guidebook.gilded_gateways.description",
+ "fallback": "3 Unique Gateway types for the main island\nAnd a secret 4th type for the outer end"
+ }
+ ]
+ ]
+ }
+ ]
+}
diff --git a/gm4_gilded_gateways/data/gm4_gilded_gateways/structure/main_0.nbt b/gm4_gilded_gateways/data/gm4_gilded_gateways/structure/main_0.nbt
new file mode 100644
index 0000000000..45368b56e7
Binary files /dev/null and b/gm4_gilded_gateways/data/gm4_gilded_gateways/structure/main_0.nbt differ
diff --git a/gm4_gilded_gateways/data/gm4_gilded_gateways/structure/main_1.nbt b/gm4_gilded_gateways/data/gm4_gilded_gateways/structure/main_1.nbt
new file mode 100644
index 0000000000..1b4a46ed20
Binary files /dev/null and b/gm4_gilded_gateways/data/gm4_gilded_gateways/structure/main_1.nbt differ
diff --git a/gm4_gilded_gateways/data/gm4_gilded_gateways/structure/main_2.nbt b/gm4_gilded_gateways/data/gm4_gilded_gateways/structure/main_2.nbt
new file mode 100644
index 0000000000..6b0ab38bfc
Binary files /dev/null and b/gm4_gilded_gateways/data/gm4_gilded_gateways/structure/main_2.nbt differ
diff --git a/gm4_gilded_gateways/data/gm4_gilded_gateways/structure/postgen_0.nbt b/gm4_gilded_gateways/data/gm4_gilded_gateways/structure/postgen_0.nbt
new file mode 100644
index 0000000000..fbe8b4cd5b
Binary files /dev/null and b/gm4_gilded_gateways/data/gm4_gilded_gateways/structure/postgen_0.nbt differ
diff --git a/gm4_gilded_gateways/data/gm4_gilded_gateways/structure/postgen_1.nbt b/gm4_gilded_gateways/data/gm4_gilded_gateways/structure/postgen_1.nbt
new file mode 100644
index 0000000000..43b9b5d321
Binary files /dev/null and b/gm4_gilded_gateways/data/gm4_gilded_gateways/structure/postgen_1.nbt differ
diff --git a/gm4_gilded_gateways/data/gm4_gilded_gateways/structure/postgen_2.nbt b/gm4_gilded_gateways/data/gm4_gilded_gateways/structure/postgen_2.nbt
new file mode 100644
index 0000000000..4bda6d7803
Binary files /dev/null and b/gm4_gilded_gateways/data/gm4_gilded_gateways/structure/postgen_2.nbt differ
diff --git a/gm4_gilded_gateways/data/gm4_gilded_gateways/structure/return.nbt b/gm4_gilded_gateways/data/gm4_gilded_gateways/structure/return.nbt
new file mode 100644
index 0000000000..5cbd2249b7
Binary files /dev/null and b/gm4_gilded_gateways/data/gm4_gilded_gateways/structure/return.nbt differ
diff --git a/gm4_gilded_gateways/data/minecraft/tags/block/dragon_immune.json b/gm4_gilded_gateways/data/minecraft/tags/block/dragon_immune.json
new file mode 100644
index 0000000000..f22096c88a
--- /dev/null
+++ b/gm4_gilded_gateways/data/minecraft/tags/block/dragon_immune.json
@@ -0,0 +1,9 @@
+{
+ "values": [
+ "minecraft:end_rod",
+ "minecraft:end_stone_bricks",
+ "minecraft:end_stone_brick_slab",
+ "minecraft:end_stone_brick_stairs",
+ "minecraft:end_stone_brick_wall"
+ ]
+}
diff --git a/gm4_gilded_gateways/data/minecraft/worldgen/feature/end_gateway_delayed.json b/gm4_gilded_gateways/data/minecraft/worldgen/feature/end_gateway_delayed.json
new file mode 100644
index 0000000000..834849de84
--- /dev/null
+++ b/gm4_gilded_gateways/data/minecraft/worldgen/feature/end_gateway_delayed.json
@@ -0,0 +1,46 @@
+{
+ "type": "minecraft:random_selector",
+ "features": [],
+ "default": {
+ "feature": {
+ "type": "minecraft:template",
+ "templates": [
+ {
+ "weight": 1,
+ "data": {
+ "id": "gm4_gilded_gateways:main_0",
+ "rotations": [
+ "none"
+ ]
+ }
+ },
+ {
+ "weight": 1,
+ "data": {
+ "id": "gm4_gilded_gateways:main_1",
+ "rotations": [
+ "none"
+ ]
+ }
+ },
+ {
+ "weight": 1,
+ "data": {
+ "id": "gm4_gilded_gateways:main_2",
+ "rotations": [
+ "none"
+ ]
+ }
+ }
+ ]
+ },
+ "placement": [
+ {
+ "type": "minecraft:offset",
+ "x": 0,
+ "y": -4,
+ "z": 0
+ }
+ ]
+ }
+}
diff --git a/gm4_gilded_gateways/data/minecraft/worldgen/feature/end_gateway_return.json b/gm4_gilded_gateways/data/minecraft/worldgen/feature/end_gateway_return.json
new file mode 100644
index 0000000000..a2d653cfa6
--- /dev/null
+++ b/gm4_gilded_gateways/data/minecraft/worldgen/feature/end_gateway_return.json
@@ -0,0 +1,28 @@
+{
+ "type": "minecraft:random_selector",
+ "features": [],
+ "default": {
+ "feature": {
+ "type": "minecraft:template",
+ "templates": [
+ {
+ "weight": 1,
+ "data": {
+ "id": "gm4_gilded_gateways:return",
+ "rotations": [
+ "none"
+ ]
+ }
+ }
+ ]
+ },
+ "placement": [
+ {
+ "type": "minecraft:offset",
+ "x": 0,
+ "y": -2,
+ "z": 0
+ }
+ ]
+ }
+}
diff --git a/gm4_gilded_gateways/images/gilded_gateways.webp b/gm4_gilded_gateways/images/gilded_gateways.webp
new file mode 100644
index 0000000000..fc14a6b87a
Binary files /dev/null and b/gm4_gilded_gateways/images/gilded_gateways.webp differ
diff --git a/gm4_gilded_gateways/images/main_island_above.png b/gm4_gilded_gateways/images/main_island_above.png
new file mode 100644
index 0000000000..3da1dad5fa
Binary files /dev/null and b/gm4_gilded_gateways/images/main_island_above.png differ
diff --git a/gm4_gilded_gateways/images/main_island_side.png b/gm4_gilded_gateways/images/main_island_side.png
new file mode 100644
index 0000000000..fc5f7a4966
Binary files /dev/null and b/gm4_gilded_gateways/images/main_island_side.png differ
diff --git a/gm4_gilded_gateways/images/outer_end_gateway.png b/gm4_gilded_gateways/images/outer_end_gateway.png
new file mode 100644
index 0000000000..a3b859933a
Binary files /dev/null and b/gm4_gilded_gateways/images/outer_end_gateway.png differ
diff --git a/gm4_gilded_gateways/pack.png b/gm4_gilded_gateways/pack.png
new file mode 100644
index 0000000000..cad414cd83
Binary files /dev/null and b/gm4_gilded_gateways/pack.png differ
diff --git a/gm4_gilded_gateways/pack.svg b/gm4_gilded_gateways/pack.svg
new file mode 100644
index 0000000000..cfca7dad71
--- /dev/null
+++ b/gm4_gilded_gateways/pack.svg
@@ -0,0 +1,145 @@
+
+
+
+
diff --git a/gm4_gilded_gateways/translations.csv b/gm4_gilded_gateways/translations.csv
new file mode 100644
index 0000000000..2ac0e31f45
--- /dev/null
+++ b/gm4_gilded_gateways/translations.csv
@@ -0,0 +1,3 @@
+key,en_us
+text.gm4.guidebook.module_desc.gilded_gateways,"Tired of boring bedrock end gateways? Bring back the magic with custom gateways!"
+text.gm4.guidebook.gilded_gateways.description,"3 Unique Gateway types for the main island\nAnd a secret 4th type for the outer end"
diff --git a/gm4_guidebook/triggers.json b/gm4_guidebook/triggers.json
index da7618b591..63519c39fb 100644
--- a/gm4_guidebook/triggers.json
+++ b/gm4_guidebook/triggers.json
@@ -1,6 +1,6 @@
{
"__important__": "Generated by generate_guidebooks.py. Don't manually update this",
- "__next__": 126,
+ "__next__": 127,
"animi_shamir": 91,
"apple_trees": 83,
"arborenda_shamir": 20,
@@ -47,6 +47,7 @@
"forterra_shamir": 19,
"fulcio_shamir": 79,
"gemini_shamir": 22,
+ "gilded_gateways": 126,
"harvest_moons": 45,
"heart_canisters": 15,
"helious_shamir": 69,