This commit is contained in:
Xikaro 2025-07-25 13:22:14 +05:00
commit 96880bd5a7
55 changed files with 12942 additions and 10893 deletions

View file

@ -1,5 +1,9 @@
# Changelog
## [Unreleased]
## Changes
- Added block interactions for mossy cobble (#1434) @Redeix
### Bug fixes
- Pushed a patch to fix registry errors on Linux machines. If you are still receiving these errors please report it [here](https://github.com/TerraFirmaGreg-Team/Modpack-Modern/issues/1431) (#1434) @Redeix
## [0.10.3] - 23-07-2025
### Changes

View file

@ -0,0 +1,256 @@
{
"multipart": [
{
"apply": {
"model": "tfg:block/grass/amber_mycelium_top",
"x": 90
}
},
{
"when": {
"snowy": false
},
"apply": [
{
"model": "tfg:block/grass/amber_mycelium_top",
"x": 270,
"y": 90
},
{
"model": "tfg:block/grass/amber_mycelium_top",
"x": 270
},
{
"model": "tfg:block/grass/amber_mycelium_top",
"x": 270,
"y": 180
},
{
"model": "tfg:block/grass/amber_mycelium_top",
"x": 270,
"y": 270
}
]
},
{
"when": {
"snowy": true
},
"apply": [
{
"model": "tfc:block/grass/sandy_loam/snowy_top",
"x": 270,
"y": 90
},
{
"model": "tfc:block/grass/sandy_loam/snowy_top",
"x": 270
},
{
"model": "tfc:block/grass/sandy_loam/snowy_top",
"x": 270,
"y": 180
},
{
"model": "tfc:block/grass/sandy_loam/snowy_top",
"x": 270,
"y": 270
}
]
},
{
"when": {
"north": true,
"snowy": false
},
"apply": {
"model": "tfg:block/grass/amber_mycelium_top"
}
},
{
"when": {
"east": true,
"snowy": false
},
"apply": {
"model": "tfg:block/grass/amber_mycelium_top",
"y": 90
}
},
{
"when": {
"south": true,
"snowy": false
},
"apply": {
"model": "tfg:block/grass/amber_mycelium_top",
"y": 180
}
},
{
"when": {
"west": true,
"snowy": false
},
"apply": {
"model": "tfg:block/grass/amber_mycelium_top",
"y": 270
}
},
{
"when": {
"north": true,
"snowy": true
},
"apply": {
"model": "tfc:block/grass/sandy_loam/snowy_top"
}
},
{
"when": {
"east": true,
"snowy": true
},
"apply": {
"model": "tfc:block/grass/sandy_loam/snowy_top",
"y": 90
}
},
{
"when": {
"south": true,
"snowy": true
},
"apply": {
"model": "tfc:block/grass/sandy_loam/snowy_top",
"y": 180
}
},
{
"when": {
"west": true,
"snowy": true
},
"apply": {
"model": "tfc:block/grass/sandy_loam/snowy_top",
"y": 270
}
},
{
"when": {
"north": false,
"snowy": false
},
"apply": [
{
"model": "tfg:block/grass/amber_mycelium_side_1"
},
{
"model": "tfg:block/grass/amber_mycelium_side_2"
},
{
"model": "tfg:block/grass/amber_mycelium_side_3"
}
]
},
{
"when": {
"east": false,
"snowy": false
},
"apply": [
{
"model": "tfg:block/grass/amber_mycelium_side_1",
"y": 90
},
{
"model": "tfg:block/grass/amber_mycelium_side_2",
"y": 90
},
{
"model": "tfg:block/grass/amber_mycelium_side_3",
"y": 90
}
]
},
{
"when": {
"south": false,
"snowy": false
},
"apply": [
{
"model": "tfg:block/grass/amber_mycelium_side_1",
"y": 180
},
{
"model": "tfg:block/grass/amber_mycelium_side_2",
"y": 180
},
{
"model": "tfg:block/grass/amber_mycelium_side_3",
"y": 180
}
]
},
{
"when": {
"west": false,
"snowy": false
},
"apply": [
{
"model": "tfg:block/grass/amber_mycelium_side_1",
"y": 270
},
{
"model": "tfg:block/grass/amber_mycelium_side_2",
"y": 270
},
{
"model": "tfg:block/grass/amber_mycelium_side_3",
"y": 270
}
]
},
{
"when": {
"north": false,
"snowy": true
},
"apply": {
"model": "tfg:block/grass/mars_dirt_snowy_side"
}
},
{
"when": {
"east": false,
"snowy": true
},
"apply": {
"model": "tfg:block/grass/mars_dirt_snowy_side",
"y": 90
}
},
{
"when": {
"south": false,
"snowy": true
},
"apply": {
"model": "tfg:block/grass/mars_dirt_snowy_side",
"y": 180
}
},
{
"when": {
"west": false,
"snowy": true
},
"apply": {
"model": "tfg:block/grass/mars_dirt_snowy_side",
"y": 270
}
}
]
}

View file

@ -0,0 +1,21 @@
{
"variants": {
"": [
{
"model": "tfg:block/grass/mars_dirt"
},
{
"model": "tfg:block/grass/mars_dirt",
"y": 90
},
{
"model": "tfg:block/grass/mars_dirt",
"y": 180
},
{
"model": "tfg:block/grass/mars_dirt",
"y": 270
}
]
}
}

View file

@ -0,0 +1,283 @@
{
"multipart": [
{
"apply": {
"model": "tfg:block/grass/rusticus_mycelium_top_1",
"x": 90
}
},
{
"when": {
"snowy": false
},
"apply": [
{
"model": "tfg:block/grass/rusticus_mycelium_top_1",
"x": 270,
"y": 90
},
{
"model": "tfg:block/grass/rusticus_mycelium_top_1",
"x": 270
},
{
"model": "tfg:block/grass/rusticus_mycelium_top_1",
"x": 270,
"y": 180
},
{
"model": "tfg:block/grass/rusticus_mycelium_top_1",
"x": 270,
"y": 270
},
{
"model": "tfg:block/grass/rusticus_mycelium_top_2",
"x": 270,
"y": 90
},
{
"model": "tfg:block/grass/rusticus_mycelium_top_2",
"x": 270
},
{
"model": "tfg:block/grass/rusticus_mycelium_top_2",
"x": 270,
"y": 180
},
{
"model": "tfg:block/grass/rusticus_mycelium_top_2",
"x": 270,
"y": 270
}
]
},
{
"when": {
"snowy": true
},
"apply": [
{
"model": "tfc:block/grass/sandy_loam/snowy_top",
"x": 270,
"y": 90
},
{
"model": "tfc:block/grass/sandy_loam/snowy_top",
"x": 270
},
{
"model": "tfc:block/grass/sandy_loam/snowy_top",
"x": 270,
"y": 180
},
{
"model": "tfc:block/grass/sandy_loam/snowy_top",
"x": 270,
"y": 270
}
]
},
{
"when": {
"north": true,
"snowy": false
},
"apply": [
{
"model": "tfg:block/grass/rusticus_mycelium_top_1"
},
{
"model": "tfg:block/grass/rusticus_mycelium_top_2"
}
]
},
{
"when": {
"east": true,
"snowy": false
},
"apply": [
{
"model": "tfg:block/grass/rusticus_mycelium_top_1",
"y": 90
},
{
"model": "tfg:block/grass/rusticus_mycelium_top_2",
"y": 90
}
]
},
{
"when": {
"south": true,
"snowy": false
},
"apply": [
{
"model": "tfg:block/grass/rusticus_mycelium_top_1",
"y": 180
},
{
"model": "tfg:block/grass/rusticus_mycelium_top_2",
"y": 180
}
]
},
{
"when": {
"west": true,
"snowy": false
},
"apply": [
{
"model": "tfg:block/grass/rusticus_mycelium_top_1",
"y": 270
},
{
"model": "tfg:block/grass/rusticus_mycelium_top_2",
"y": 270
}
]
},
{
"when": {
"north": true,
"snowy": true
},
"apply": {
"model": "tfc:block/grass/sandy_loam/snowy_top"
}
},
{
"when": {
"east": true,
"snowy": true
},
"apply": {
"model": "tfc:block/grass/sandy_loam/snowy_top",
"y": 90
}
},
{
"when": {
"south": true,
"snowy": true
},
"apply": {
"model": "tfc:block/grass/sandy_loam/snowy_top",
"y": 180
}
},
{
"when": {
"west": true,
"snowy": true
},
"apply": {
"model": "tfc:block/grass/sandy_loam/snowy_top",
"y": 270
}
},
{
"when": {
"north": false,
"snowy": false
},
"apply": [
{
"model": "tfg:block/grass/rusticus_mycelium_side_1"
},
{
"model": "tfg:block/grass/rusticus_mycelium_side_2"
}
]
},
{
"when": {
"east": false,
"snowy": false
},
"apply": [
{
"model": "tfg:block/grass/rusticus_mycelium_side_1",
"y": 90
},
{
"model": "tfg:block/grass/rusticus_mycelium_side_2",
"y": 90
}
]
},
{
"when": {
"south": false,
"snowy": false
},
"apply": [
{
"model": "tfg:block/grass/rusticus_mycelium_side_1",
"y": 180
},
{
"model": "tfg:block/grass/rusticus_mycelium_side_2",
"y": 180
}
]
},
{
"when": {
"west": false,
"snowy": false
},
"apply": [
{
"model": "tfg:block/grass/rusticus_mycelium_side_1",
"y": 270
},
{
"model": "tfg:block/grass/rusticus_mycelium_side_2",
"y": 270
}
]
},
{
"when": {
"north": false,
"snowy": true
},
"apply": {
"model": "tfg:block/grass/mars_dirt_snowy_side"
}
},
{
"when": {
"east": false,
"snowy": true
},
"apply": {
"model": "tfg:block/grass/mars_dirt_snowy_side",
"y": 90
}
},
{
"when": {
"south": false,
"snowy": true
},
"apply": {
"model": "tfg:block/grass/mars_dirt_snowy_side",
"y": 180
}
},
{
"when": {
"west": false,
"snowy": true
},
"apply": {
"model": "tfg:block/grass/mars_dirt_snowy_side",
"y": 270
}
}
]
}

View file

@ -0,0 +1,221 @@
{
"multipart": [
{
"apply": {
"model": "tfg:block/grass/sangnum_mycelium_top",
"x": 90
}
},
{
"when": {
"snowy": false
},
"apply": [
{
"model": "tfg:block/grass/sangnum_mycelium_top",
"x": 270,
"y": 90
},
{
"model": "tfg:block/grass/sangnum_mycelium_top",
"x": 270
},
{
"model": "tfg:block/grass/sangnum_mycelium_top",
"x": 270,
"y": 180
},
{
"model": "tfg:block/grass/sangnum_mycelium_top",
"x": 270,
"y": 270
}
]
},
{
"when": {
"snowy": true
},
"apply": [
{
"model": "tfc:block/grass/sandy_loam/snowy_top",
"x": 270,
"y": 90
},
{
"model": "tfc:block/grass/sandy_loam/snowy_top",
"x": 270
},
{
"model": "tfc:block/grass/sandy_loam/snowy_top",
"x": 270,
"y": 180
},
{
"model": "tfc:block/grass/sandy_loam/snowy_top",
"x": 270,
"y": 270
}
]
},
{
"when": {
"north": true,
"snowy": false
},
"apply": {
"model": "tfg:block/grass/sangnum_mycelium_top"
}
},
{
"when": {
"east": true,
"snowy": false
},
"apply": {
"model": "tfg:block/grass/sangnum_mycelium_top",
"y": 90
}
},
{
"when": {
"south": true,
"snowy": false
},
"apply": {
"model": "tfg:block/grass/sangnum_mycelium_top",
"y": 180
}
},
{
"when": {
"west": true,
"snowy": false
},
"apply": {
"model": "tfg:block/grass/sangnum_mycelium_top",
"y": 270
}
},
{
"when": {
"north": true,
"snowy": true
},
"apply": {
"model": "tfc:block/grass/sandy_loam/snowy_top"
}
},
{
"when": {
"east": true,
"snowy": true
},
"apply": {
"model": "tfc:block/grass/sandy_loam/snowy_top",
"y": 90
}
},
{
"when": {
"south": true,
"snowy": true
},
"apply": {
"model": "tfc:block/grass/sandy_loam/snowy_top",
"y": 180
}
},
{
"when": {
"west": true,
"snowy": true
},
"apply": {
"model": "tfc:block/grass/sandy_loam/snowy_top",
"y": 270
}
},
{
"when": {
"north": false,
"snowy": false
},
"apply": {
"model": "tfg:block/grass/sangnum_mycelium_side"
}
},
{
"when": {
"east": false,
"snowy": false
},
"apply": {
"model": "tfg:block/grass/sangnum_mycelium_side",
"y": 90
}
},
{
"when": {
"south": false,
"snowy": false
},
"apply": {
"model": "tfg:block/grass/sangnum_mycelium_side",
"y": 180
}
},
{
"when": {
"west": false,
"snowy": false
},
"apply": {
"model": "tfg:block/grass/sangnum_mycelium_side",
"y": 270
}
},
{
"when": {
"north": false,
"snowy": true
},
"apply": {
"model": "tfg:block/grass/mars_dirt_snowy_side"
}
},
{
"when": {
"east": false,
"snowy": true
},
"apply": {
"model": "tfg:block/grass/mars_dirt_snowy_side",
"y": 90
}
},
{
"when": {
"south": false,
"snowy": true
},
"apply": {
"model": "tfg:block/grass/mars_dirt_snowy_side",
"y": 180
}
},
{
"when": {
"west": false,
"snowy": true
},
"apply": {
"model": "tfg:block/grass/mars_dirt_snowy_side",
"y": 270
}
}
]
}

View file

@ -0,0 +1,7 @@
{
"variants": {
"": {
"model": "tfg:block/fluid/semiheavy_ammoniacal_water"
}
}
}

View file

@ -296,13 +296,14 @@
"block.tfg.electromagnetic_accelerator": "Electromagnetic Accelerator",
"block.tfg.superconductor_coil_large": "Large Superconductor Coil",
"block.tfg.superconductor_coil_small": "Small Superconductor Coil",
"tfg:nether_slurry": "Nether Slurry",
"tfg:enriched_nether_slurry": "Enriched Nether Slurry",
"tfg:ender_slurry": "Ender Slurry",
"tfg:enriched_ender_slurry": "Enriched Ender Slurry",
"tfg:semiheavy_ammoniacal_water": "Semiheavy Ammoniacal Water",
"tfg:sulfur_fumes": "Sulfur Fumes",
"tfg:super_heated_slurry": "Super Heated Slurry",
"fluid.tfg.nether_slurry": "Nether Slurry",
"fluid.tfg.enriched_nether_slurry": "Enriched Nether Slurry",
"fluid.tfg.ender_slurry": "Ender Slurry",
"fluid.tfg.enriched_ender_slurry": "Enriched Ender Slurry",
"fluid.tfg.semiheavy_ammoniacal_water": "Semiheavy Ammoniacal Water",
"fluid.tfg.heavy_water": "Heavy Water",
"fluid.tfg.sulfur_fumes": "Sulfur Fumes",
"fluid.tfg.super_heated_slurry": "Super Heated Slurry",
"item.tfg.antipoison_pill": "Antipoison Pill",
"item.tfg.haste_pill": "Haste Pill",
"item.tfg.night_vision_pill": "Night Vision Pill",

View file

@ -0,0 +1,8 @@
{
"parent": "tfc:block/grass_side",
"textures": {
"texture": "tfg:block/grass/mars_dirt",
"overlay": "tfg:block/grass/amber_side_1",
"particle": "tfg:block/grass/amber_side_1"
}
}

View file

@ -0,0 +1,8 @@
{
"parent": "tfc:block/grass_side",
"textures": {
"texture": "tfg:block/grass/mars_dirt",
"overlay": "tfg:block/grass/amber_side_2",
"particle": "tfg:block/grass/amber_side_2"
}
}

View file

@ -0,0 +1,8 @@
{
"parent": "tfc:block/grass_side",
"textures": {
"texture": "tfg:block/grass/mars_dirt",
"overlay": "tfg:block/grass/amber_side_3",
"particle": "tfg:block/grass/amber_side_3"
}
}

View file

@ -0,0 +1,27 @@
{
"parent": "block/block",
"textures": {
"overlay": "tfg:block/grass/amber_top",
"particle": "tfg:block/grass/amber_top"
},
"elements": [
{
"from": [
0,
0,
0
],
"to": [
16,
16,
0
],
"faces": {
"north": {
"texture": "#overlay",
"cullface": "north"
}
}
}
]
}

View file

@ -0,0 +1,6 @@
{
"parent": "minecraft:block/cube_all",
"textures": {
"all": "tfg:block/grass/mars_dirt"
}
}

View file

@ -0,0 +1,6 @@
{
"parent": "tfc:block/grass_snowy_side",
"textures": {
"texture": "tfg:block/grass/mars_dirt"
}
}

View file

@ -0,0 +1,8 @@
{
"parent": "tfc:block/grass_side",
"textures": {
"texture": "tfg:block/grass/mars_dirt",
"overlay": "tfg:block/grass/rusticus_side_1",
"particle": "tfg:block/grass/rusticus_side_1"
}
}

View file

@ -0,0 +1,8 @@
{
"parent": "tfc:block/grass_side",
"textures": {
"texture": "tfg:block/grass/mars_dirt",
"overlay": "tfg:block/grass/rusticus_side_2",
"particle": "tfg:block/grass/rusticus_side_2"
}
}

View file

@ -0,0 +1,7 @@
{
"parent": "tfc:block/grass_top",
"textures": {
"overlay": "tfg:block/grass/rusticus_top_1",
"particle": "tfg:block/grass/rusticus_top_1"
}
}

View file

@ -0,0 +1,7 @@
{
"parent": "tfc:block/grass_top",
"textures": {
"overlay": "tfg:block/grass/rusticus_top_2",
"particle": "tfg:block/grass/rusticus_top_2"
}
}

View file

@ -0,0 +1,8 @@
{
"parent": "tfc:block/grass_side",
"textures": {
"texture": "tfg:block/grass/mars_dirt",
"overlay": "tfg:block/grass/sangnum_side",
"particle": "tfg:block/grass/sangnum_side"
}
}

View file

@ -0,0 +1,7 @@
{
"parent": "tfc:block/grass_top",
"textures": {
"overlay": "tfg:block/grass/sangnum_top",
"particle": "tfg:block/grass/sangnum_top"
}
}

View file

@ -0,0 +1,5 @@
{
"textures": {
"particle": "minecraft:block/water_still"
}
}

View file

@ -0,0 +1,36 @@
{
"parent": "minecraft:block/cube",
"textures": {
"0": "tfg:block/grass/mars_dirt",
"1": "tfg:block/grass/amber_side_1",
"2": "tfg:block/grass/amber_top",
"particle": "#2"
},
"elements": [
{
"from": [ 0, 0, 0 ],
"to": [ 16, 16, 16 ],
"faces": {
"north": {
"texture": "#1"
},
"east": {
"texture": "#1"
},
"south": {
"texture": "#1"
},
"west": {
"texture": "#1"
},
"up": {
"texture": "#2"
},
"down": {
"texture": "#0"
}
}
}
],
"display": {}
}

View file

@ -0,0 +1,3 @@
{
"parent": "tfg:block/grass/mars_dirt"
}

View file

@ -0,0 +1,36 @@
{
"parent": "minecraft:block/cube",
"textures": {
"0": "tfg:block/grass/mars_dirt",
"1": "tfg:block/grass/rusticus_side_1",
"2": "tfg:block/grass/rusticus_top_1",
"particle": "#2"
},
"elements": [
{
"from": [ 0, 0, 0 ],
"to": [ 16, 16, 16 ],
"faces": {
"north": {
"texture": "#1"
},
"east": {
"texture": "#1"
},
"south": {
"texture": "#1"
},
"west": {
"texture": "#1"
},
"up": {
"texture": "#2"
},
"down": {
"texture": "#0"
}
}
}
],
"display": {}
}

View file

@ -0,0 +1,36 @@
{
"parent": "minecraft:block/cube",
"textures": {
"0": "tfg:block/grass/mars_dirt",
"1": "tfg:block/grass/sangnum_side",
"2": "tfg:block/grass/sangnum_top",
"particle": "#2"
},
"elements": [
{
"from": [ 0, 0, 0 ],
"to": [ 16, 16, 16 ],
"faces": {
"north": {
"texture": "#1"
},
"east": {
"texture": "#1"
},
"south": {
"texture": "#1"
},
"west": {
"texture": "#1"
},
"up": {
"texture": "#2"
},
"down": {
"texture": "#0"
}
}
}
],
"display": {}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 678 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 676 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 660 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 450 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 652 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 621 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 194 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 197 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 728 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 540 B

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,74 @@
{
"carvers": {
"air": [
"tfg:mars_cave",
"tfg:mars_canyon"
]
},
"downfall": 0.0,
"effects": {
"fog_color": 15117444,
"mood_sound": {
"block_search_extent": 8,
"offset": 2.0,
"sound": "minecraft:ambient.cave",
"tick_delay": 6000
},
"particle": {
"options": {
"type": "minecraft:crimson_spore"
},
"probability": 0.014
},
"sky_color": 15117444,
"water_color": 4159204,
"water_fog_color": 329011
},
"features": [
[],
"#tfg:mars_craters",
[
"tfg:earth/geode/amethyst",
"tfg:earth/geode/barite",
"tfg:earth/geode/calcite",
"tfg:earth/geode/gypsum",
"tfg:earth/geode/opal",
"tfg:earth/geode/pyrite",
"tfg:earth/geode/quartzite"
],
[
"tfc:vein/gabbro_dike",
"tfc:vein/diorite_dike"
],
[],
[],
"#tfg:mars_veins",
[],
"#tfg:mars_small_rock_features",
[
],
[
"tfg:mars/hardening"
]
],
"has_precipitation": false,
"spawn_costs": {
"ad_astra:martian_raptor": {
"charge": 0.2,
"energy_budget": 0.015
}
},
"spawners": {
"ambient": [],
"axolotls": [],
"creature": [],
"misc": [],
"monster": [
],
"underground_water_creature": [],
"water_ambient": [],
"water_creature": []
},
"temperature": 0.8
}

View file

@ -0,0 +1,75 @@
{
"carvers": {
"air": [
"tfg:mars_cave",
"tfg:mars_canyon"
]
},
"downfall": 0.0,
"effects": {
"fog_color": 15117444,
"mood_sound": {
"block_search_extent": 8,
"offset": 2.0,
"sound": "minecraft:ambient.cave",
"tick_delay": 6000
},
"particle": {
"options": {
"type": "minecraft:crimson_spore"
},
"probability": 0.014
},
"sky_color": 15117444,
"water_color": 4159204,
"water_fog_color": 329011
},
"features": [
[],
"#tfg:mars_craters",
[
"tfg:earth/geode/amethyst",
"tfg:earth/geode/barite",
"tfg:earth/geode/calcite",
"tfg:earth/geode/gypsum",
"tfg:earth/geode/opal",
"tfg:earth/geode/pyrite",
"tfg:earth/geode/quartzite"
],
[
"tfc:vein/gabbro_dike",
"tfc:vein/diorite_dike"
],
[],
[],
"#tfg:mars_veins",
[],
"#tfg:mars_small_rock_features",
[
],
[
"tfg:mars/hardening"
]
],
"has_precipitation": false,
"spawn_costs": {
"ad_astra:martian_raptor": {
"charge": 0.2,
"energy_budget": 0.015
}
},
"spawners": {
"ambient": [],
"axolotls": [],
"creature": [],
"misc": [],
"monster": [
],
"underground_water_creature": [],
"water_ambient": [],
"water_creature": []
},
"temperature": 0.8
}

View file

@ -0,0 +1,75 @@
{
"carvers": {
"air": [
"tfg:mars_cave",
"tfg:mars_canyon"
]
},
"downfall": 0.0,
"effects": {
"fog_color": 15117444,
"mood_sound": {
"block_search_extent": 8,
"offset": 2.0,
"sound": "minecraft:ambient.cave",
"tick_delay": 6000
},
"particle": {
"options": {
"type": "minecraft:crimson_spore"
},
"probability": 0.014
},
"sky_color": 15117444,
"water_color": 4159204,
"water_fog_color": 329011
},
"features": [
[],
"#tfg:mars_craters",
[
"tfg:earth/geode/amethyst",
"tfg:earth/geode/barite",
"tfg:earth/geode/calcite",
"tfg:earth/geode/gypsum",
"tfg:earth/geode/opal",
"tfg:earth/geode/pyrite",
"tfg:earth/geode/quartzite"
],
[
"tfc:vein/gabbro_dike",
"tfc:vein/diorite_dike"
],
[],
[],
"#tfg:mars_veins",
[],
"#tfg:mars_small_rock_features",
[
],
[
"tfg:mars/hardening"
]
],
"has_precipitation": false,
"spawn_costs": {
"ad_astra:martian_raptor": {
"charge": 0.2,
"energy_budget": 0.015
}
},
"spawners": {
"ambient": [],
"axolotls": [],
"creature": [],
"misc": [],
"monster": [
],
"underground_water_creature": [],
"water_ambient": [],
"water_creature": []
},
"temperature": 0.8
}

View file

@ -0,0 +1,78 @@
{
"carvers": {
"air": [
"tfg:mars_cave",
"tfg:mars_canyon"
]
},
"downfall": 0.0,
"effects": {
"fog_color": 15117444,
"mood_sound": {
"block_search_extent": 8,
"offset": 2.0,
"sound": "minecraft:ambient.cave",
"tick_delay": 6000
},
"particle": {
"options": {
"type": "minecraft:crimson_spore"
},
"probability": 0.014
},
"sky_color": 15117444,
"water_color": 4159204,
"water_fog_color": 329011
},
"features": [
[],
"#tfg:mars_craters",
[
"tfg:earth/geode/amethyst",
"tfg:earth/geode/barite",
"tfg:earth/geode/calcite",
"tfg:earth/geode/gypsum",
"tfg:earth/geode/opal",
"tfg:earth/geode/pyrite",
"tfg:earth/geode/quartzite"
],
[
"tfc:vein/gabbro_dike",
"tfc:vein/diorite_dike"
],
[],
[],
"#tfg:mars_veins",
[],
"#tfg:mars_small_rock_features",
[
"tfg:mars/surface/aeronos_patch",
"tfg:mars/surface/strophar_patch",
"tfg:mars/surface/aeronos_huge",
"tfg:mars/surface/strophar_huge"
],
[
"tfg:mars/hardening"
]
],
"has_precipitation": false,
"spawn_costs": {
"ad_astra:martian_raptor": {
"charge": 0.2,
"energy_budget": 0.015
}
},
"spawners": {
"ambient": [],
"axolotls": [],
"creature": [],
"misc": [],
"monster": [
],
"underground_water_creature": [],
"water_ambient": [],
"water_creature": []
},
"temperature": 0.8
}

View file

@ -0,0 +1,8 @@
{
"type": "tfc:flood_fill_lake",
"config": {
"state": "tfg:semiheavy_ammoniacal_water",
"replace_fluids": [],
"overfill": true
}
}

View file

@ -131,7 +131,7 @@
},
{
"derivative": 0.0,
"location": -0.47,
"location": -0.26,
"value": 1
},
{

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,24 @@
{
"feature": "tfg:mars/semiheavy_ammoniacal_water",
"placement": [
{
"type": "minecraft:count",
"count": 1
},
{
"type": "minecraft:in_square"
},
{
"type": "minecraft:heightmap",
"heightmap": "WORLD_SURFACE_WG"
},
{
"type": "minecraft:random_offset",
"xz_spread": 0,
"y_spread": -3
},
{
"type": "minecraft:biome"
}
]
}

View file

@ -217,7 +217,9 @@ const registerAdAstraBlockTags = (event) => {
event.add('ad_astra:mars_stone_replaceables', 'tfc:sand/black')
event.add('ad_astra:mars_stone_replaceables', 'tfc:sand/red')
event.add('ad_astra:mars_stone_replaceables', 'tfc:sand/pink')
event.add('tfc:can_carve', '#ad_astra:moon_stone_replaceables')
event.add('tfc:can_carve', '#ad_astra:mars_stone_replaceables')
event.add('minecraft:rabbits_spawnable_on', '#ad_astra:moon_stone_replaceables')
event.add('species:limpet_spawnable_on', '#ad_astra:moon_stone_replaceables')
@ -265,7 +267,6 @@ const registerAdAstraBlockTags = (event) => {
event.add('tfg:rock_slabs', 'ad_astra:glacio_stone_slab')
event.add('ad_astra:destroyed_in_space', '#minecraft:saplings')
event.remove('ad_astra:destroyed_in_space', 'ad_astra:glacian_leaves')
}
const registerAdAstraBiomeTags = (event) => {

View file

@ -18,7 +18,7 @@
pill_event.forEach(pill_event => {
ItemEvents.rightClicked(event => {
const {item,server,player,player:{x,y,z,username}} = event
const {item,server,player,player:{x,y,z}} = event
if (item.id != `tfg:${pill_event}_pill`) return
item.count--
player.addItemCooldown(item, 100)
@ -27,7 +27,7 @@
});
ItemEvents.rightClicked(event => {
const {item,server,player,player:{x,y,z,username}} = event
const {item,server,player,player:{x,y,z}} = event
if (item.id != `tfg:${pill_event}_tablet`) return
item.count--
player.addItemCooldown(item, 100)
@ -37,7 +37,7 @@
});
ItemEvents.rightClicked(event => {
const {item,server,player,player:{x,y,z,username}} = event
const {item,server,player,player:{x,y,z}} = event
if (item.id != `tfg:antipoison_pill`) return
item.count--
player.addItemCooldown(item, 50)
@ -46,7 +46,7 @@
});
ItemEvents.rightClicked(event => {
const {item,server,player,player:{x,y,z,username}} = event
const {item,server,player,player:{x,y,z}} = event
if (item.id != `tfg:antipoison_tablet`) return
item.count--
player.addItemCooldown(item, 50)
@ -75,7 +75,7 @@
salvo_event.forEach(salvo_event => {
ItemEvents.rightClicked(event => {
const {item,server,player,player:{x,y,z,username}} = event
const {item,server,player,player:{x,y,z}} = event
if (item.id != `tfg:${salvo_event}_salvo`) return
item.count--
player.addItemCooldown(item, 100)
@ -85,7 +85,7 @@
});
ItemEvents.rightClicked(event => {
const {item,server,player,player:{x,y,z,username}} = event
const {item,server,player,player:{x,y,z}} = event
if (item.id != `tfg:absorption_salvo`) return
item.count--
player.addItemCooldown(item, 200)
@ -94,7 +94,7 @@ ItemEvents.rightClicked(event => {
});
ItemEvents.rightClicked(event => {
const {item,server,player,player:{x,y,z,username}} = event
const {item,server,player,player:{x,y,z}} = event
if (item.id != `tfg:instant_health_salvo`) return
item.count--
player.addItemCooldown(item, 100)
@ -107,7 +107,7 @@ ItemEvents.rightClicked(event => {
// Vase Sounds
global.MINECRAFT_DYE_NAMES.forEach(color => {
BlockEvents.rightClicked(event => {
const {block,server,player,player:{x,y,z,username}} = event
const {block,server,player} = event
if (block.id != `tfg:decorative_vase/${color}`) {return}{
server.runCommandSilent(`playsound tfc:block.quern.drag block ${player.username} ${block.x} ${block.y} ${block.z} 0.3 2.0 0.1`)
}})
@ -115,7 +115,7 @@ global.MINECRAFT_DYE_NAMES.forEach(color => {
BlockEvents.rightClicked(event => {
const {block,server,player,player:{x,y,z,username}} = event
const {block,server,player} = event
if (block.id != 'tfg:decorative_vase') {return}{
server.runCommandSilent(`playsound tfc:block.quern.drag block ${player.username} ${block.x} ${block.y} ${block.z} 0.3 2.0 0.1`)
}});
@ -246,12 +246,96 @@ function getTFGPersistentDataRoot(player)
//#region Block Interactions
/**
* @typedef {Object} BrickVariant
* @property {string} brick_type - The name of the brick variant.
* @property {string|null} brick - Main brick block ID.
* @property {string|null} brick_stairs - Brick stairs block ID.
* @property {string|null} brick_slab - Brick slab block ID.
* @property {string|null} brick_wall - Brick wall block ID.
* @property {string|null} cracked_brick - Cracked brick block ID.
* @property {string|null} cracked_stairs - Cracked brick stairs block ID.
* @property {string|null} cracked_slab - Cracked brick slab block ID.
* @property {string|null} cracked_wall - Cracked brick wall block ID.
* @property {string|null} mossy_brick - Mossy brick block ID.
* @property {string|null} mossy_stairs - Mossy brick stairs block ID.
* @property {string|null} mossy_slab - Mossy brick slab block ID.
* @property {string|null} mossy_wall - Mossy brick wall block ID.
* @property {string|null} smooth_brick - Smooth brick block ID.
* @property {string|null} smooth_stairs - Smooth brick stairs block ID.
* @property {string|null} smooth_slab - Smooth brick slab block ID.
* @property {string|null} smooth_wall - Smooth brick wall block ID.
* @property {string|null} chiseled_brick - Chiseled brick block ID.
*/
/** @type {BrickVariant[]} */
global.BRICK_INDEX = (global.TFC_STONE_TYPES ?? []).map(tfc_stone => ({
brick_type: tfc_stone,
brick: `tfc:rock/bricks/${tfc_stone}`, brick_stairs: `tfc:rock/bricks/${tfc_stone}_stairs`, brick_slab: `tfc:rock/bricks/${tfc_stone}_slab`, brick_wall: `tfc:rock/bricks/${tfc_stone}_wall`,
cracked_brick: `tfc:rock/cracked_bricks/${tfc_stone}`, cracked_stairs: `tfc:rock/cracked_bricks/${tfc_stone}_stairs`, cracked_slab: `tfc:rock/cracked_bricks/${tfc_stone}_slab`, cracked_wall: `tfc:rock/cracked_bricks/${tfc_stone}_wall`,
mossy_brick: `tfc:rock/mossy_bricks/${tfc_stone}`, mossy_stairs: `tfc:rock/mossy_bricks/${tfc_stone}_stairs`, mossy_slab: `tfc:rock/mossy_bricks/${tfc_stone}_slab`, mossy_wall: `tfc:rock/mossy_bricks/${tfc_stone}_wall`,
smooth_brick: `tfc:rock/smooth/${tfc_stone}`, smooth_stairs: `tfc:rock/smooth/${tfc_stone}_stairs`, smooth_slab: `tfc:rock/smooth/${tfc_stone}_slab`, smooth_wall: `tfc:rock/smooth/${tfc_stone}_wall`,
chiseled_brick: `tfc:rock/chiseled/${tfc_stone}`
}));
(global.CREATE_DECO_BRICK_TYPES ?? []).slice(0, -1).forEach(create_brick => {
global.BRICK_INDEX.push({
brick_type: create_brick,
brick: `createdeco:${create_brick}_bricks`, brick_stairs: `createdeco:${create_brick}_brick_stairs`, brick_slab: `createdeco:${create_brick}_brick_slab`, brick_wall: `createdeco:${create_brick}_brick_wall`,
cracked_brick: `createdeco:cracked_${create_brick}_bricks`, cracked_stairs: `createdeco:cracked_${create_brick}_brick_stairs`, cracked_slab: `createdeco:cracked_${create_brick}_brick_slab`, cracked_wall: `createdeco:cracked_${create_brick}_brick_wall`,
mossy_brick: `createdeco:mossy_${create_brick}_bricks`, mossy_stairs: `createdeco:mossy_${create_brick}_brick_stairs`, mossy_slab: `createdeco:mossy_${create_brick}_brick_slab`, mossy_wall: `createdeco:mossy_${create_brick}_brick_wall`,
smooth_brick: `createdeco:corner_${create_brick}_bricks`, smooth_stairs: `createdeco:corner_${create_brick}_brick_stairs`, smooth_slab: `createdeco:corner_${create_brick}_brick_slab`, smooth_wall: `createdeco:corner_${create_brick}_brick_wall`,
chiseled_brick: `createdeco:tiled_${create_brick}_bricks`
})
});
global.BRICK_INDEX = global.BRICK_INDEX.concat([
// {
// brick_type: '',
// brick: '', brick_stairs: '', brick_slab: '', brick_wall: '',
// cracked_brick: '', cracked_stairs: '', cracked_slab: '', cracked_wall: '',
// mossy_brick: '', mossy_stairs: '', mossy_slab: '', mossy_wallL: '',
// smooth_brick: '', smooth_stairs: '', smooth_slab: '', smooth_wall: '',
// chiseled_brick: ''
// },
{
brick_type: 'red',
brick: 'minecraft:bricks', brick_stairs: 'minecraft:brick_stairs', brick_slab: 'minecraft:brick_slab', brick_wall: 'minecraft:brick_wall',
cracked_brick: 'createdeco:cracked_red_bricks', cracked_stairs: 'createdeco:cracked_red_brick_stairs', cracked_slab: 'createdeco:cracked_red_brick_slab', cracked_wall: 'createdeco:cracked_red_brick_wall',
mossy_brick: 'createdeco:mossy_red_bricks', mossy_stairs: 'createdeco:mossy_red_brick_stairs', mossy_slab: 'createdeco:mossy_red_brick_slab', mossy_wall: 'createdeco:mossy_red_brick_wall',
smooth_brick: 'createdeco:corner_red_bricks', smooth_stairs: 'createdeco:corner_red_brick_stairs', smooth_slab: 'createdeco:corner_red_brick_slab', smooth_wall: 'createdeco:corner_red_brick_wall',
chiseled_brick: 'createdeco:tiled_red_bricks'
},
{
brick_type: 'light_concrete',
brick: 'gtceu:light_concrete_bricks', brick_stairs: null, brick_slab: null, brick_wall: null,
cracked_brick: 'gtceu:cracked_light_concrete_bricks', cracked_stairs: null, cracked_slab: null, cracked_wall: null,
mossy_brick: 'gtceu:mossy_light_concrete_bricks', mossy_stairs: null, mossy_slab: null, mossy_wall: null,
smooth_brick: 'gtceu:polished_light_concrete', smooth_stairs: null, smooth_slab: null, smooth_wall: null,
chiseled_brick: 'gtceu:chiseled_light_concrete'
},
{
brick_type: 'dark_concrete',
brick: 'gtceu:dark_concrete_bricks', brick_stairs: null, brick_slab: null, brick_wall: null,
cracked_brick: 'gtceu:cracked_dark_concrete_bricks', cracked_stairs: null, cracked_slab: null, cracked_wall: null,
mossy_brick: 'gtceu:mossy_dark_concrete_bricks', mossy_stairs: null, mossy_slab: null, mossy_wall: null,
smooth_brick: 'gtceu:polished_dark_concrete', smooth_stairs: null, smooth_slab: null, smooth_wall: null,
chiseled_brick: 'gtceu:chiseled_dark_concrete'
},
{
brick_type: 'red_granite',
brick: 'gtceu:red_granite_bricks', brick_stairs: null, brick_slab: null, brick_wall: null,
cracked_brick: 'gtceu:cracked_red_granite_bricks', cracked_stairs: null, cracked_slab: null, cracked_wall: null,
mossy_brick: 'gtceu:mossy_red_granite_bricks', mossy_stairs: null, mossy_slab: null, mossy_wall: null,
smooth_brick: 'gtceu:polished_red_granite', smooth_stairs: null, smooth_slab: null, smooth_wall: null,
chiseled_brick: 'gtceu:chiseled_red_granite'
}
]);
/**
* Function for replacing a block with another block by crouch-right-clicking with a tool.
*
*
* If input and output is null recipe will just return.
*
* @param {*} event
* @param {*} event
* @param {string} inputBlock -Block ID to be replaced. Accepts a Tag, but not recommended.
* @param {string} outputBlock -Block ID of the replacement.
* @param {string} toolId -Item ID of the tool.
@ -309,10 +393,10 @@ function transformBlockWithTool(event, inputBlock, outputBlock, toolId, damageTo
/**
* Function for replacing a block with another block by crouch-right-clicking with an item.
*
*
* If input and output is null recipe will just return.
*
* @param {*} event
* @param {*} event
* @param {string} inputBlock -Block ID to be replaced. Accepts a Tag, but not recommended.
* @param {string} outputBlock -Block ID of the replacement.
* @param {string} itemId -Item ID of the consumed item. Accepts Tags.
@ -415,6 +499,32 @@ BlockEvents.rightClicked(event => {
transformBlockWithTool(event, b.brick, b.smooth_brick, '#create:sandpaper', true, 'create:sanding_short', 'minecraft:crit', true);
transformBlockWithTool(event, b.mossy_brick, b.smooth_brick, '#create:sandpaper', true, 'create:sanding_short', 'minecraft:crit', true);
transformBlockWithTool(event, b.cracked_brick, b.smooth_brick, '#create:sandpaper', true, 'create:sanding_short', 'minecraft:crit', true);
// smooth ->
transformBlockWithTool(event, b.smooth_brick, b.cracked_brick, '#forge:tools/hammers',true, 'minecraft:block.copper.hit', 'minecraft:crit', true);
transformBlockWithItem(event, b.smooth_brick, b.mossy_brick, '#tfc:compost_greens_low', true, 1, 'minecraft:block.moss.hit', 'minecraft:item_slime', true);
transformBlockWithItem(event, b.smooth_brick, b.mossy_brick, 'gtceu:plant_ball', true, 1, 'minecraft:block.moss.hit', 'minecraft:item_slime', true);
transformBlockWithTool(event, b.smooth_brick, b.brick, '#forge:tools/files', true, 'minecraft:block.beehive.shear', 'minecraft:crit', true);
}
//Other TFC Blocks
global.TFC_STONE_TYPES.forEach(stone => {
//cobble -> mossy
transformBlockWithItem(event, `tfc:rock/cobble/${stone}`, `tfc:rock/mossy_cobble/${stone}`, '#tfc:compost_greens_low', true, 1, 'minecraft:block.moss.hit', 'minecraft:item_slime', true);
transformBlockWithItem(event, `tfc:rock/cobble/${stone}`, `tfc:rock/mossy_cobble/${stone}`, 'gtceu:plant_ball', true, 1, 'minecraft:block.moss.hit', 'minecraft:item_slime', true);
transformBlockWithItem(event, `tfc:rock/cobble/${stone}_stairs`, `tfc:rock/mossy_cobble/${stone}_stairs`, '#tfc:compost_greens_low', true, 1, 'minecraft:block.moss.hit', 'minecraft:item_slime', true);
transformBlockWithItem(event, `tfc:rock/cobble/${stone}_stairs`, `tfc:rock/mossy_cobble/${stone}_stairs`, 'gtceu:plant_ball', true, 1, 'minecraft:block.moss.hit', 'minecraft:item_slime', true);
transformBlockWithItem(event, `tfc:rock/cobble/${stone}_slab`, `tfc:rock/mossy_cobble/${stone}_slab`, '#tfc:compost_greens_low', true, 1, 'minecraft:block.moss.hit', 'minecraft:item_slime', true);
transformBlockWithItem(event, `tfc:rock/cobble/${stone}_slab`, `tfc:rock/mossy_cobble/${stone}_slab`, 'gtceu:plant_ball', true, 1, 'minecraft:block.moss.hit', 'minecraft:item_slime', true);
transformBlockWithItem(event, `tfc:rock/cobble/${stone}_wall`, `tfc:rock/mossy_cobble/${stone}_wall`, '#tfc:compost_greens_low', true, 1, 'minecraft:block.moss.hit', 'minecraft:item_slime', true);
transformBlockWithItem(event, `tfc:rock/cobble/${stone}_wall`, `tfc:rock/mossy_cobble/${stone}_wall`, 'gtceu:plant_ball', true, 1, 'minecraft:block.moss.hit', 'minecraft:item_slime', true);
//mossy -> cobble
transformBlockWithTool(event, `tfc:rock/mossy_cobble/${stone}`, `tfc:rock/cobble/${stone}`, '#forge:tools/knives', true, 'minecraft:item.axe.wax_off', 'minecraft:item_slime', true);
transformBlockWithItem(event, `tfc:rock/mossy_cobble/${stone}`, `tfc:rock/cobble/${stone}`, 'tfc:groundcover/pumice', true, 1, 'minecraft:item.axe.wax_off', 'minecraft:item_slime', true);
transformBlockWithTool(event, `tfc:rock/mossy_cobble/${stone}_stairs`, `tfc:rock/cobble/${stone}_stairs`, '#forge:tools/knives', true, 'minecraft:item.axe.wax_off', 'minecraft:item_slime', true);
transformBlockWithItem(event, `tfc:rock/mossy_cobble/${stone}_stairs`, `tfc:rock/cobble/${stone}_stairs`, 'tfc:groundcover/pumice', true, 1, 'minecraft:item.axe.wax_off', 'minecraft:item_slime', true);
transformBlockWithTool(event, `tfc:rock/mossy_cobble/${stone}_slab`, `tfc:rock/cobble/${stone}_slab`, '#forge:tools/knives', true, 'minecraft:item.axe.wax_off', 'minecraft:item_slime', true);
transformBlockWithItem(event, `tfc:rock/mossy_cobble/${stone}_slab`, `tfc:rock/cobble/${stone}_slab`, 'tfc:groundcover/pumice', true, 1, 'minecraft:item.axe.wax_off', 'minecraft:item_slime', true);
transformBlockWithTool(event, `tfc:rock/mossy_cobble/${stone}_wall`, `tfc:rock/cobble/${stone}_wall`, '#forge:tools/knives', true, 'minecraft:item.axe.wax_off', 'minecraft:item_slime', true);
transformBlockWithItem(event, `tfc:rock/mossy_cobble/${stone}_wall`, `tfc:rock/cobble/${stone}_wall`, 'tfc:groundcover/pumice', true, 1, 'minecraft:item.axe.wax_off', 'minecraft:item_slime', true);
});
});
//#endregion

View file

@ -58,5 +58,10 @@ function registerTFGCollapseRecipes(event) {
event.recipes.tfc.collapse('gtceu:red_granite_cobblestone', 'gtceu:red_granite')
event.recipes.tfc.collapse('gtceu:red_granite_cobblestone', 'tfg:rock/hardened_red_granite')
event.recipes.tfc.collapse('gtceu:red_granite_cobblestone', '#forge:ores_in_ground/red_granite')
event.recipes.tfc.landslide('tfg:grass/mars_dirt', 'tfg:grass/mars_dirt')
event.recipes.tfc.landslide('tfg:grass/mars_dirt', 'tfg:grass/amber_mycelium')
event.recipes.tfc.landslide('tfg:grass/mars_dirt', 'tfg:grass/rusticus_mycelium')
event.recipes.tfc.landslide('tfg:grass/mars_dirt', 'tfg:grass/sangnum_mycelium')
// #endregion
}

View file

@ -244,6 +244,12 @@ const registerTFGItemTags = (event) => {
// #region Space blocks
event.add('tfg:moon_plants', 'tfg:lunar_roots')
event.add('tfg:moon_plants', 'tfg:lunar_sprouts')
event.add('minecraft:dirt', 'tfg:grass/mars_dirt')
event.add('tfc:dirt', 'tfg:grass/mars_dirt')
event.add('tfc:grass', 'tfg:grass/amber_mycelium')
event.add('tfc:grass', 'tfg:grass/rusticus_mycelium')
event.add('tfc:grass', 'tfg:grass/sangnum_mycelium')
// #endregion
// #region 0.7.19 -> 0.9 conversion
@ -356,8 +362,8 @@ const registerTFGBlockTags = (event) => {
event.add('tfc:crops', 'tfg:sunflower')
event.add('tfc:mineable_with_sharp_tool','tfg:sunflower')
// #region Nether blocks
// #region Nether blocks
event.add('minecraft:nether_carver_replaceables', 'tfg:rock/hardened_deepslate')
event.add('minecraft:moss_replaceable', 'tfg:rock/hardened_deepslate')
event.add('minecraft:base_stone_nether', 'tfg:rock/hardened_deepslate')
@ -376,6 +382,22 @@ const registerTFGBlockTags = (event) => {
event.add('minecraft:nether_carver_replaceables', 'tfg:rock/hardened_dripstone')
event.add('minecraft:base_stone_nether', 'tfg:rock/hardened_dripstone')
event.add('tfc:rock/hardened', 'tfg:rock/hardened_dripstone')
// #endregion
// #region Mars blocks
event.add('minecraft:dirt', 'tfg:grass/mars_dirt')
event.add('tfc:dirt', 'tfg:grass/mars_dirt')
event.add('tfc:grass', 'tfg:grass/amber_mycelium')
event.add('tfc:grass', 'tfg:grass/rusticus_mycelium')
event.add('tfc:grass', 'tfg:grass/sangnum_mycelium')
event.add('tfg:do_not_destroy_in_space', 'tfg:grass/amber_mycelium')
event.add('tfg:do_not_destroy_in_space', 'tfg:grass/rusticus_mycelium')
event.add('tfg:do_not_destroy_in_space', 'tfg:grass/sangnum_mycelium')
event.add('tfc:can_landslide', 'tfg:grass/mars_dirt')
event.add('tfc:can_landslide', 'tfg:grass/amber_mycelium')
event.add('tfc:can_landslide', 'tfg:grass/rusticus_mycelium')
event.add('tfc:can_landslide', 'tfg:grass/sangnum_mycelium')
// #endregion
event.add('tfg:harvester_harvestable', '#tfc:fruit_tree_leaves')
event.add('tfg:harvester_harvestable', '#tfc:berry_bushes')
@ -388,7 +410,6 @@ const registerTFGBlockTags = (event) => {
event.add('forge:mineable/wrench', 'tfg:superconductor_coil_small')
event.add('forge:mineable/wrench', 'tfg:electromagnetic_accelerator')
// #endregion
}
//#endregion

View file

@ -1,175 +1,175 @@
"use strict";
const registerTFGBlocks = (event) => {
registerTFGNetherBlocks(event)
registerTFGSpaceBlocks(event)
registerTFGSupportBlocks(event)
registerTFGCrops(event)
event.create('tfg:artificial_end_portal_frame')
.stoneSoundType()
.tagBlock('minecraft:mineable/pickaxe')
.requiresTool(true)
.fullBlock(true)
.item(item => {
item.modelJson({ parent: 'minecraft:block/end_portal_frame' })
})
event.create('tfg:dry_ice', 'tfg:particle_emitter')
.textureAll('tfg:block/dry_ice')
.soundType('bone_block')
.hardness(1)
.resistance(1)
.tagBlock('minecraft:mineable/pickaxe')
.tagBlock('tfcambiental:cold_stuff')
.defaultTranslucent()
.mapColor('color_white')
.speedFactor(1.2)
.particleOffset(1, 1, 1)
.particleVelocity(0.05, 0, 0.05)
.particle('minecraft:campfire_cosy_smoke')
.particleCount(2)
.particleForced(false)
// #region Machine Casings
global.TFG_MACHINE_CASINGS.forEach(type => {
event.create(`tfg:casings/${type}`)
.translationKey(`block.tfg.casings.${type}`)
.model(`tfg:block/casings/${type}`)
.soundType('copper')
.hardness(5)
.resistance(6)
.tagBlock('minecraft:mineable/pickaxe')
.mapColor('color_light_gray')
})
//#endregion
// #region Decorative vases
global.MINECRAFT_DYE_NAMES.forEach(color => {
event.create(`tfg:decorative_vase/generated/${color}`, 'cardinal')
.model(`tfg:block/decorative_vase/loot_vase_${color}`)
.soundType('decorated_pot')
.hardness(0.7)
.tagBlock('minecraft:mineable/pickaxe')
.mapColor(`color_${color}`)
.box(2, 0, 2, 14, 20, 14)
.fullBlock(false)
.opaque(false)
.renderType('cutout')
event.create(`tfg:decorative_vase/${color}`, 'cardinal')
.model(`tfg:block/decorative_vase/vase_${color}`)
.soundType('decorated_pot')
.hardness(0.7)
.tagBlock('minecraft:mineable/pickaxe')
.mapColor(`color_${color}`)
.box(2, 0, 2, 14, 20, 14)
.fullBlock(false)
.opaque(false)
.renderType('cutout')
.blockEntity(be => {
be.attach('tfc:inventory', {
width: 9,
height: 1,
size: size => size.isSmallerThan('large')
})
be.rightClickOpensInventory()
})
event.create(`tfg:decorative_vase/unfired/${color}`, 'cardinal')
.model(`tfg:block/decorative_vase/vase_unfired_${color}`)
.soundType('decorated_pot')
.hardness(0.7)
.tagBlock('minecraft:mineable/pickaxe')
.mapColor(`color_${color}`)
.box(2, 0, 2, 14, 20, 14)
.fullBlock(false)
.opaque(false)
.renderType('cutout')
})
event.create('tfg:decorative_vase', 'cardinal')
.model('tfg:block/decorative_vase/vase')
.soundType('decorated_pot')
.hardness(0.7)
.tagBlock('minecraft:mineable/pickaxe')
.mapColor(`color_gray`)
.box(2, 0, 2, 14, 20, 14)
.fullBlock(false)
.opaque(false)
.renderType('cutout')
.blockEntity(be => {
be.attach('tfc:inventory', {
width: 9,
height: 1,
size: size => size.isSmallerThan('large')
})
be.rightClickOpensInventory()
})
event.create('tfg:decorative_vase/unfired', 'cardinal')
.model('tfg:block/decorative_vase/vase_unfired')
.soundType('decorated_pot')
.hardness(0.7)
.tagBlock('minecraft:mineable/pickaxe')
.mapColor(`color_gray`)
.box(2, 0, 2, 14, 20, 14)
.fullBlock(false)
.opaque(false)
.renderType('cutout')
// #endregion
// #region Layer blocks
event.create('tfg:ash_pile', 'tfg:layer_block')
.existingItem('tfc:powder/wood_ash')
.mapColor('color_light_gray')
event.create('tfg:pile/black_sand', 'tfg:layer_block')
.existingItem('tfc:sand/black')
event.create('tfg:pile/brown_sand', 'tfg:layer_block')
.existingItem('tfc:sand/brown')
event.create('tfg:pile/green_sand', 'tfg:layer_block')
.existingItem('tfc:sand/green')
event.create('tfg:pile/pink_sand', 'tfg:layer_block')
.existingItem('tfc:sand/pink')
event.create('tfg:pile/red_sand', 'tfg:layer_block')
.existingItem('tfc:sand/red')
event.create('tfg:pile/white_sand', 'tfg:layer_block')
.existingItem('tfc:sand/white')
event.create('tfg:pile/yellow_sand', 'tfg:layer_block')
.existingItem('tfc:sand/yellow')
event.create('tfg:pile/mars_sand', 'tfg:layer_block')
.existingItem('ad_astra:mars_sand')
event.create('tfg:pile/moon_sand', 'tfg:layer_block')
.existingItem('ad_astra:moon_sand')
event.create('tfg:pile/venus_sand', 'tfg:layer_block')
.existingItem('ad_astra:venus_sand')
// #endregion
// #region Deprecated
event.create('treetap:tap')
.requiresTool(false)
.textureAll('tfg:item/deprecated')
event.create('tfcea:refrigerator')
.requiresTool(false)
.textureAll('tfg:item/deprecated')
// #endregion
}
"use strict";
const registerTFGBlocks = (event) => {
registerTFGNetherBlocks(event)
registerTFGSpaceBlocks(event)
registerTFGSupportBlocks(event)
registerTFGCrops(event)
event.create('tfg:artificial_end_portal_frame')
.stoneSoundType()
.tagBlock('minecraft:mineable/pickaxe')
.requiresTool(true)
.fullBlock(true)
.item(item => {
item.modelJson({ parent: 'minecraft:block/end_portal_frame' })
})
event.create('tfg:dry_ice', 'tfg:particle_emitter')
.textureAll('tfg:block/dry_ice')
.soundType('bone_block')
.hardness(1)
.resistance(1)
.tagBlock('minecraft:mineable/pickaxe')
.tagBlock('tfcambiental:cold_stuff')
.defaultTranslucent()
.mapColor('color_white')
.speedFactor(1.2)
.particleOffset(1, 1, 1)
.particleVelocity(0.05, 0, 0.05)
.particle('minecraft:campfire_cosy_smoke')
.particleCount(2)
.particleForced(false)
// #region Machine Casings
global.TFG_MACHINE_CASINGS.forEach(type => {
event.create(`tfg:casings/${type}`)
.translationKey(`block.tfg.casings.${type}`)
.model(`tfg:block/casings/${type}`)
.soundType('copper')
.hardness(5)
.resistance(6)
.tagBlock('minecraft:mineable/pickaxe')
.mapColor('color_light_gray')
})
//#endregion
// #region Decorative vases
global.MINECRAFT_DYE_NAMES.forEach(color => {
event.create(`tfg:decorative_vase/generated/${color}`, 'cardinal')
.model(`tfg:block/decorative_vase/loot_vase_${color}`)
.soundType('decorated_pot')
.hardness(0.7)
.tagBlock('minecraft:mineable/pickaxe')
.mapColor(`color_${color}`)
.box(2, 0, 2, 14, 20, 14)
.fullBlock(false)
.opaque(false)
.renderType('cutout')
event.create(`tfg:decorative_vase/${color}`, 'cardinal')
.model(`tfg:block/decorative_vase/vase_${color}`)
.soundType('decorated_pot')
.hardness(0.7)
.tagBlock('minecraft:mineable/pickaxe')
.mapColor(`color_${color}`)
.box(2, 0, 2, 14, 20, 14)
.fullBlock(false)
.opaque(false)
.renderType('cutout')
.blockEntity(be => {
be.attach('tfc:inventory', {
width: 9,
height: 1,
size: size => size.isSmallerThan('large')
})
be.rightClickOpensInventory()
})
event.create(`tfg:decorative_vase/unfired/${color}`, 'cardinal')
.model(`tfg:block/decorative_vase/vase_unfired_${color}`)
.soundType('decorated_pot')
.hardness(0.7)
.tagBlock('minecraft:mineable/pickaxe')
.mapColor(`color_${color}`)
.box(2, 0, 2, 14, 20, 14)
.fullBlock(false)
.opaque(false)
.renderType('cutout')
})
event.create('tfg:decorative_vase', 'cardinal')
.model('tfg:block/decorative_vase/vase')
.soundType('decorated_pot')
.hardness(0.7)
.tagBlock('minecraft:mineable/pickaxe')
.mapColor(`color_gray`)
.box(2, 0, 2, 14, 20, 14)
.fullBlock(false)
.opaque(false)
.renderType('cutout')
.blockEntity(be => {
be.attach('tfc:inventory', {
width: 9,
height: 1,
size: size => size.isSmallerThan('large')
})
be.rightClickOpensInventory()
})
event.create('tfg:decorative_vase/unfired', 'cardinal')
.model('tfg:block/decorative_vase/vase_unfired')
.soundType('decorated_pot')
.hardness(0.7)
.tagBlock('minecraft:mineable/pickaxe')
.mapColor(`color_gray`)
.box(2, 0, 2, 14, 20, 14)
.fullBlock(false)
.opaque(false)
.renderType('cutout')
// #endregion
// #region Layer blocks
event.create('tfg:ash_pile', 'tfg:layer_block')
.existingItem('tfc:powder/wood_ash')
.mapColor('color_light_gray')
event.create('tfg:pile/black_sand', 'tfg:layer_block')
.existingItem('tfc:sand/black')
event.create('tfg:pile/brown_sand', 'tfg:layer_block')
.existingItem('tfc:sand/brown')
event.create('tfg:pile/green_sand', 'tfg:layer_block')
.existingItem('tfc:sand/green')
event.create('tfg:pile/pink_sand', 'tfg:layer_block')
.existingItem('tfc:sand/pink')
event.create('tfg:pile/red_sand', 'tfg:layer_block')
.existingItem('tfc:sand/red')
event.create('tfg:pile/white_sand', 'tfg:layer_block')
.existingItem('tfc:sand/white')
event.create('tfg:pile/yellow_sand', 'tfg:layer_block')
.existingItem('tfc:sand/yellow')
event.create('tfg:pile/mars_sand', 'tfg:layer_block')
.existingItem('ad_astra:mars_sand')
event.create('tfg:pile/moon_sand', 'tfg:layer_block')
.existingItem('ad_astra:moon_sand')
event.create('tfg:pile/venus_sand', 'tfg:layer_block')
.existingItem('ad_astra:venus_sand')
// #endregion
// #region Deprecated
event.create('treetap:tap')
.requiresTool(false)
.textureAll('tfg:item/deprecated')
event.create('tfcea:refrigerator')
.requiresTool(false)
.textureAll('tfg:item/deprecated')
// #endregion
}

View file

@ -1,6 +1,8 @@
"use strict";
/**
* @type {string[]} - Item Names
*/
global.AIRCRAFT_UPGRADES = [
"lv_aircraft_engine",
"hv_aircraft_engine",
@ -22,6 +24,9 @@ global.AIRCRAFT_UPGRADES = [
"titanium_hull_reinforcement"
]
/**
* @type {string[]} - Item IDs
*/
global.EXTRATERRESTRIAL_RAW_ROCKS = [
'ad_astra:moon_stone',
'ad_astra:moon_deepslate',
@ -32,6 +37,9 @@ global.EXTRATERRESTRIAL_RAW_ROCKS = [
'gtceu:red_granite'
]
/**
* @type {string[]} - Item IDs
*/
global.EXTRATERRESTRIAL_HARDENED_ROCKS = [
'tfg:rock/hardened_moon_stone',
'tfg:rock/hardened_moon_deepslate',
@ -42,6 +50,9 @@ global.EXTRATERRESTRIAL_HARDENED_ROCKS = [
'tfg:rock/hardened_red_granite'
]
/**
* @type {string[]} - Stone Names
*/
global.MOON_STONE_TYPES = [
"andesite",
"basalt",
@ -54,6 +65,9 @@ global.MOON_STONE_TYPES = [
"rhyolite"
]
/**
* @type {string[]} - Biome IDs
*/
global.MOON_BIOMES = [
'tfg:moon/lunar_plains',
'tfg:moon/lunar_sands',
@ -67,6 +81,9 @@ global.MOON_BIOMES = [
'tfg:moon/lunar_lights_sparse'
]
/**
* @type {string[]} - Biome IDs
*/
global.MARS_BIOMES = [
'tfg:mars/martian_oasis',
'tfg:mars/martian_deep_desert',
@ -83,6 +100,9 @@ global.MARS_BIOMES = [
'tfg:mars/martian_mountains'
]
/**
* @type {string[]} - Block Names
*/
global.TFG_MACHINE_CASINGS = [
//'machine_casing_clean_stainless_steel_desh',
//'machine_casing_desh_ptfe',
@ -94,8 +114,22 @@ global.TFG_MACHINE_CASINGS = [
'machine_casing_red_solar_panel'
];
/**
* @type {string[]} - Circuit Tiers
*/
global.UNIVERSAL_CIRCUIT_TIERS = ["ulv", "lv", "mv", "hv", "ev", "iv", "luv", "zpm", "uv", "uhv"];
/**
* @typedef {Object} Fruit
* @property {string} name - Fruit Name
* @property {string} id - Fruit ID
* @property {number} saturation - Saturation Value
* @property {number} water - Water Value
* @property {number} fruit - Fruit Value
* @property {number} decay - Decay Modifier
*/
/** @type {Fruit[]} */
global.FOOD_FRUIT = [
{name: 'red_grapes', id: 'firmalife:food/red_grapes', saturation: 0.4, water: 2, fruit: 0.5, decay: 2.25},
{name: 'white_grapes', id: 'firmalife:food/white_grapes', saturation: 0.4, water: 2, fruit: 0.5, decay: 2.25},
@ -127,65 +161,3 @@ global.FOOD_FRUIT = [
{name: 'fig', id: 'firmalife:food/fig', saturation: 1, water: 5, fruit: 0.9, decay: 1},
{name: 'pineapple', id: 'firmalife:food/pineapple', saturation: 1, water: 1, fruit: 0.8, decay: 4.5}
];
/** @global */
global.BRICK_INDEX = global.TFC_STONE_TYPES.map(tfc_stone => ({
brick_type: tfc_stone,
brick: `tfc:rock/bricks/${tfc_stone}`, brick_stairs: `tfc:rock/bricks/${tfc_stone}_stairs`, brick_slab: `tfc:rock/bricks/${tfc_stone}_slab`, brick_wall: `tfc:rock/bricks/${tfc_stone}_wall`,
cracked_brick: `tfc:rock/cracked_bricks/${tfc_stone}`, cracked_stairs: `tfc:rock/cracked_bricks/${tfc_stone}_stairs`, cracked_slab: `tfc:rock/cracked_bricks/${tfc_stone}_slab`, cracked_wall: `tfc:rock/cracked_bricks/${tfc_stone}_wall`,
mossy_brick: `tfc:rock/mossy_bricks/${tfc_stone}`, mossy_stairs: `tfc:rock/mossy_bricks/${tfc_stone}_stairs`, mossy_slab: `tfc:rock/mossy_bricks/${tfc_stone}_slab`, mossy_wall: `tfc:rock/mossy_bricks/${tfc_stone}_wall`,
smooth_brick: `tfc:rock/smooth/${tfc_stone}`, smooth_stairs: `tfc:rock/smooth/${tfc_stone}_stairs`, smooth_slab: `tfc:rock/smooth/${tfc_stone}_slab`, smooth_wall: `tfc:rock/smooth/${tfc_stone}_wall`,
chiseled_brick: `tfc:rock/chiseled/${tfc_stone}`
}));
global.CREATE_DECO_BRICK_TYPES.slice(0, -1).forEach(create_brick => {
global.BRICK_INDEX.push({
brick_type: create_brick,
brick: `createdeco:${create_brick}_bricks`, brick_stairs: `createdeco:${create_brick}_brick_stairs`, brick_slab: `createdeco:${create_brick}_brick_slab`, brick_wall: `createdeco:${create_brick}_brick_wall`,
cracked_brick: `createdeco:cracked_${create_brick}_bricks`, cracked_stairs: `createdeco:cracked_${create_brick}_brick_stairs`, cracked_slab: `createdeco:cracked_${create_brick}_brick_slab`, cracked_wall: `createdeco:cracked_${create_brick}_brick_wall`,
mossy_brick: `createdeco:mossy_${create_brick}_bricks`, mossy_stairs: `createdeco:mossy_${create_brick}_brick_stairs`, mossy_slab: `createdeco:mossy_${create_brick}_brick_slab`, mossy_wall: `createdeco:mossy_${create_brick}_brick_wall`,
smooth_brick: `createdeco:corner_${create_brick}_bricks`, smooth_stairs: `createdeco:corner_${create_brick}_brick_stairs`, smooth_slab: `createdeco:corner_${create_brick}_brick_slab`, smooth_wall: `createdeco:corner_${create_brick}_brick_wall`,
chiseled_brick: `createdeco:tiled_${create_brick}_bricks`
})
});
global.BRICK_INDEX = global.BRICK_INDEX.concat([
// {
// brick_type: '',
// brick: '', brick_stairs: '', brick_slab: '', brick_wall: '',
// cracked_brick: '', cracked_stairs: '', cracked_slab: '', cracked_wall: '',
// mossy_brick: '', mossy_stairs: '', mossy_slab: '', mossy_wallL: '',
// smooth_brick: '', smooth_stairs: '', smooth_slab: '', smooth_wall: '',
// chiseled_brick: ''
// },
{
brick_type: 'red',
brick: 'minecraft:bricks', brick_stairs: 'minecraft:brick_stairs', brick_slab: 'minecraft:brick_slab', brick_wall: 'minecraft:brick_wall',
cracked_brick: 'createdeco:cracked_red_bricks', cracked_stairs: 'createdeco:cracked_red_brick_stairs', cracked_slab: 'createdeco:cracked_red_brick_slab', cracked_wall: 'createdeco:cracked_red_brick_wall',
mossy_brick: 'createdeco:mossy_red_bricks', mossy_stairs: 'createdeco:mossy_red_brick_stairs', mossy_slab: 'createdeco:mossy_red_brick_slab', mossy_wall: 'createdeco:mossy_red_brick_wall',
smooth_brick: 'createdeco:corner_red_bricks', smooth_stairs: 'createdeco:corner_red_brick_stairs', smooth_slab: 'createdeco:corner_red_brick_slab', smooth_wall: 'createdeco:corner_red_brick_wall',
chiseled_brick: 'createdeco:tiled_red_bricks'
},
{
brick_type: 'light_concrete',
brick: 'gtceu:light_concrete_bricks', brick_stairs: null, brick_slab: null, brick_wall: null,
cracked_brick: 'gtceu:cracked_light_concrete_bricks', cracked_stairs: null, cracked_slab: null, cracked_wall: null,
mossy_brick: 'gtceu:mossy_light_concrete_bricks', mossy_stairs: null, mossy_slab: null, mossy_wall: null,
smooth_brick: 'gtceu:polished_light_concrete', smooth_stairs: null, smooth_slab: null, smooth_wall: null,
chiseled_brick: 'gtceu:chiseled_light_concrete'
},
{
brick_type: 'dark_concrete',
brick: 'gtceu:dark_concrete_bricks', brick_stairs: null, brick_slab: null, brick_wall: null,
cracked_brick: 'gtceu:cracked_dark_concrete_bricks', cracked_stairs: null, cracked_slab: null, cracked_wall: null,
mossy_brick: 'gtceu:mossy_dark_concrete_bricks', mossy_stairs: null, mossy_slab: null, mossy_wall: null,
smooth_brick: 'gtceu:polished_dark_concrete', smooth_stairs: null, smooth_slab: null, smooth_wall: null,
chiseled_brick: 'gtceu:chiseled_dark_concrete'
},
{
brick_type: 'red_granite',
brick: 'gtceu:red_granite_bricks', brick_stairs: null, brick_slab: null, brick_wall: null,
cracked_brick: 'gtceu:cracked_red_granite_bricks', cracked_stairs: null, cracked_slab: null, cracked_wall: null,
mossy_brick: 'gtceu:mossy_red_granite_bricks', mossy_stairs: null, mossy_slab: null, mossy_wall: null,
smooth_brick: 'gtceu:polished_red_granite', smooth_stairs: null, smooth_slab: null, smooth_wall: null,
chiseled_brick: 'gtceu:chiseled_red_granite'
}
])

View file

@ -32,11 +32,6 @@ const registerTFGFluids = (event) => {
.noBlock()
//#region Mars
event.create('tfg:semiheavy_ammoniacal_water')
.thinTexture(0x704f786c)
.color(0x4f786c)
.temperature(213)
.renderType('translucent')
//#endregion
//#region Venus

View file

@ -4425,7 +4425,7 @@
"files": [
{
"type": "modrinth",
"file_name": "defaultoptions-forge-1.20.1-18.0.2.jar",
"file_name": "defaultoptions-forge-1.20.1-18.0.3.jar",
"mc_versions": [
"1.20",
"1.20.1"
@ -4434,22 +4434,22 @@
"forge"
],
"release_type": "release",
"url": "https://cdn.modrinth.com/data/WEg59z5b/versions/qCfqBSp6/defaultoptions-forge-1.20.1-18.0.2.jar",
"id": "qCfqBSp6",
"url": "https://cdn.modrinth.com/data/WEg59z5b/versions/vNF6Yrv4/defaultoptions-forge-1.20.1-18.0.3.jar",
"id": "vNF6Yrv4",
"parent_id": "WEg59z5b",
"hashes": {
"sha512": "fa1dce631b50ef18b8c2ec5ac942dbb1c3b775a85a6bed045d1e26aea4d5aa8c13877ddc4aed059aa829684932e986fd4450b2215273225b6b278af6d5a80fe2",
"sha1": "30fb48d3884b33175644235bfe6f6d29c4248d19"
"sha512": "d3c13262743fb06d481a4755da9daa78350cf1e3ffe88b7f8ff86ad6c5c7bd729483e5890e4f6e2969dacf08649765277598251d4d5dff20f68a5690f352c750",
"sha1": "bbc80fc1a7f0e17b64fca56fcf7d55562db9783d"
},
"required_dependencies": [
"MBAkmtvl"
],
"size": 93386,
"date_published": "2025-07-22T15:03:48.450032Z"
"size": 94649,
"date_published": "2025-07-23T21:48:31.220228Z"
},
{
"type": "curseforge",
"file_name": "defaultoptions-forge-1.20.1-18.0.2.jar",
"file_name": "defaultoptions-forge-1.20.1-18.0.3.jar",
"mc_versions": [
"1.20.1",
"1.20"
@ -4458,18 +4458,18 @@
"forge"
],
"release_type": "release",
"url": "https://edge.forgecdn.net/files/6799/217/defaultoptions-forge-1.20.1-18.0.2.jar",
"id": "6799217",
"url": "https://edge.forgecdn.net/files/6804/680/defaultoptions-forge-1.20.1-18.0.3.jar",
"id": "6804680",
"parent_id": "232131",
"hashes": {
"sha1": "2dcb222998a3194d14aab49112824b3f514d42bd",
"md5": "bf35ff9db893d713d9b7d8c8291333e5"
"sha1": "a7bffd6bd5cff19793cede8c1b8bb0450eb25059",
"md5": "10d4a6afe004f72a965d0263583576db"
},
"required_dependencies": [
"531761"
],
"size": 93387,
"date_published": "2025-07-22T15:03:48.190Z"
"size": 94649,
"date_published": "2025-07-23T21:49:30.653Z"
}
]
},