Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ dependencies {
compileOnly "com.google.code.findbugs:jsr305:3.0.2"

// Version list: https://maven.su5ed.dev/#/releases/org/sinytra/wiki-exporter-fabric
modRuntimeOnly "org.sinytra:wiki-exporter-fabric:2.2.1+1.21.8"
modRuntimeOnly "org.sinytra:wiki-exporter-fabric:2.2.1+1.21.11"
}

loom {
Expand Down
1 change: 1 addition & 0 deletions docs/_meta.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
{
"customize": "Customize",
"configuration.mdx": "⚙️ Configuration"
}
3 changes: 3 additions & 0 deletions docs/customize/_meta.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"mob_variants.mdx": "Mob Variants"
}
36 changes: 36 additions & 0 deletions docs/customize/mob_variants.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
---
title: Mob variants
---

[Mob variants](https://minecraft.wiki/w/Mob_variant_definitions) define the assets and models used and define the conditions in which a variant spawns.
They are defined in the datapack, and the mod allows you to add and edit variants of some mobs added by Promenade.

## JSON format

### Duck

Duck variants are defined in the `data/<namespace>/promenade/duck_variant` folder.

* [JSON Object]
* [String] `asset_id` - The resource location of the texture to use for the adult duck.
* [String] `baby_texture` - The resource location of the texture to use for the duckling. (defaults to `promenade:entity/duck/duckling`)
* [String] `spawn_conditions` - The spawn conditions of this variant, see [spawn conditions](https://minecraft.wiki/w/Mob_variant_definitions#Spawn_condition).

### Capybara

Capybara variants are defined in the `data/<namespace>/promenade/capybara_variant` folder.

* [JSON Object]
* [String] `small_eyes_texture` - The resource location of the texture to use for adult capybaras.
* [String] `large_eyes_texture` - The resource location of the texture to use for baby capybaras and farting adult capybaras.
* [String] `closed_eyes_texture` - The resource location of the texture to use for sleeping capybaras.
* [String] `spawn_conditions` - The spawn conditions of this variant, see [spawn conditions](https://minecraft.wiki/w/Mob_variant_definitions#Spawn_condition).

### Sunken

Sunken variants are defined in the `data/<namespace>/promenade/capybara_variant` folder.

* [JSON Object]
* [String] `asset_id` - The resource location of the texture to use.
* [String] `loot_table` - The resource location of the loot table to use upon death.
* [String] `spawn_conditions` - The spawn conditions of this variant, see [spawn conditions](https://minecraft.wiki/w/Mob_variant_definitions#Spawn_condition).
12 changes: 6 additions & 6 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,13 @@ loader_name=Fabric
loader_icon=https://fabricmc.net/assets/logo.png

# check these on https://fabricmc.net/versions.html
minecraft_version=1.21.9
yarn_mappings=1.21.9+build.1
loader_version=0.17.2
loom_version=1.11-SNAPSHOT
minecraft_version=1.21.11
yarn_mappings=1.21.11+build.3
loader_version=0.18.3
loom_version=1.14-SNAPSHOT

# Fabric API
fabric_version=0.133.13+1.21.9
fabric_version=0.140.2+1.21.11

# https://maven.terraformersmc.com/releases/com/terraformersmc/biolith-fabric
biolith_version=3.4.0-alpha.4
biolith_version=3.5.0-beta.3
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.1-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
public final class PromenadeBlockRenderLayers {
public static void register() {

BlockRenderLayerMap.putBlocks(BlockRenderLayer.CUTOUT_MIPPED,
BlockRenderLayerMap.putBlocks(BlockRenderLayer.CUTOUT,
PromenadeBlocks.OAK_LEAF_PILE,
PromenadeBlocks.SPRUCE_LEAF_PILE,
PromenadeBlocks.BIRCH_LEAF_PILE,
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,22 @@
import net.minecraft.entity.SpawnGroup;
import net.minecraft.particle.ParticleTypes;
import net.minecraft.registry.*;
import net.minecraft.sound.*;
import net.minecraft.sound.BiomeAdditionsSound;
import net.minecraft.sound.BiomeMoodSound;
import net.minecraft.sound.MusicType;
import net.minecraft.sound.SoundEvents;
import net.minecraft.world.attribute.AmbientParticle;
import net.minecraft.world.attribute.AmbientSounds;
import net.minecraft.world.attribute.BackgroundMusic;
import net.minecraft.world.attribute.EnvironmentAttributes;
import net.minecraft.world.biome.*;
import net.minecraft.world.gen.GenerationStep;
import net.minecraft.world.gen.carver.ConfiguredCarver;
import net.minecraft.world.gen.carver.ConfiguredCarvers;
import net.minecraft.world.gen.feature.*;
import org.jetbrains.annotations.Nullable;

import java.util.List;
import java.util.Optional;
import java.util.concurrent.CompletableFuture;

public class PromenadeBiomeProvider extends FabricDynamicRegistryProvider {
Expand Down Expand Up @@ -75,23 +83,20 @@ public static Biome createSakuraGroves(RegistryEntryLookup<PlacedFeature> featur
SpawnSettings.Builder spawns = new SpawnSettings.Builder();

DefaultBiomeFeatures.addFarmAnimals(spawns);
DefaultBiomeFeatures.addBatsAndMonsters(spawns);
DefaultBiomeFeatures.addCaveAndMonsters(spawns);
spawns.spawn(SpawnGroup.CREATURE, 5, new SpawnSettings.SpawnEntry(EntityType.WOLF, 4, 4));
spawns.spawn(SpawnGroup.CREATURE, 16, new SpawnSettings.SpawnEntry(EntityType.FOX, 1, 3));
spawns.spawn(SpawnGroup.CREATURE, 2, new SpawnSettings.SpawnEntry(EntityType.PANDA, 4, 5));

return createBiome(
true,
0.6F,
0.4F,
6459391,
2170954,
6484135,
null,
spawns,
generation,
MusicType.createIngameMusic(PromenadeSoundEvents.MUSIC_OVERWORLD_SAKURA_GROVES)
);
return biome(0.6F, 0.4F)
.spawnSettings(spawns.build())
.generationSettings(generation.build())
.effects(new BiomeEffects.Builder()
.waterColor(6459391)
.grassColor(6484135)
.build())
.setEnvironmentAttribute(EnvironmentAttributes.BACKGROUND_MUSIC_AUDIO, new BackgroundMusic(MusicType.createIngameMusic(PromenadeSoundEvents.MUSIC_OVERWORLD_SAKURA_GROVES)))
.build();
}

public static Biome createCarnelianTreeway(RegistryEntryLookup<PlacedFeature> features, RegistryEntryLookup<ConfiguredCarver<?>> carvers) {
Expand All @@ -116,22 +121,20 @@ public static Biome createCarnelianTreeway(RegistryEntryLookup<PlacedFeature> fe
SpawnSettings.Builder spawns = new SpawnSettings.Builder();

DefaultBiomeFeatures.addFarmAnimals(spawns);
DefaultBiomeFeatures.addBatsAndMonsters(spawns);
DefaultBiomeFeatures.addCaveAndMonsters(spawns);
spawns.spawn(SpawnGroup.CREATURE, 5, new SpawnSettings.SpawnEntry(EntityType.WOLF, 4, 4));
spawns.spawn(SpawnGroup.CREATURE, 7, new SpawnSettings.SpawnEntry(EntityType.FOX, 2, 3));

return createBiome(
true,
1.2F,
0.9F,
155336,
541,
9090320,
10931465,
spawns,
generation,
null
);
return biome(1.2F, 0.9F)
.spawnSettings(spawns.build())
.generationSettings(generation.build())
.effects(new BiomeEffects.Builder()
.waterColor(155336)
.grassColor(9090320)
.foliageColor(10931465)
.build())
.setEnvironmentAttribute(EnvironmentAttributes.WATER_FOG_COLOR_VISUAL, 541)
.build();
}

public static Biome createGlacarianTaiga(RegistryEntryLookup<PlacedFeature> featureLookup, RegistryEntryLookup<ConfiguredCarver<?>> carverLookup) {
Expand Down Expand Up @@ -185,20 +188,17 @@ public static Biome createGlacarianTaiga(RegistryEntryLookup<PlacedFeature> feat
.spawn(SpawnGroup.CREATURE, 4, new SpawnSettings.SpawnEntry(PromenadeEntityTypes.DUCK, 4, 4))
.spawn(SpawnGroup.CREATURE, 8, new SpawnSettings.SpawnEntry(EntityType.WOLF, 4, 4))
.spawn(SpawnGroup.CREATURE, 8, new SpawnSettings.SpawnEntry(EntityType.FOX, 2, 4));
DefaultBiomeFeatures.addBatsAndMonsters(spawns);

return createBiome(
true,
-0.7F,
0.8f,
1724346,
197394,
null,
null,
spawns,
generation,
null
);
DefaultBiomeFeatures.addCaveAndMonsters(spawns);

return biome(- 0.7F, 0.8f)
.spawnSettings(spawns.build())
.generationSettings(generation.build())
.effects(new BiomeEffects.Builder()
.waterColor(1724346)
.build())
.setEnvironmentAttribute(EnvironmentAttributes.FOG_COLOR_VISUAL, 12638463)
.setEnvironmentAttribute(EnvironmentAttributes.WATER_FOG_COLOR_VISUAL, 197394)
.build();
}

public static Biome createDarkAmaranthForest(RegistryEntryLookup<PlacedFeature> featureLookup, RegistryEntryLookup<ConfiguredCarver<?>> carverLookup) {
Expand All @@ -225,19 +225,15 @@ public static Biome createDarkAmaranthForest(RegistryEntryLookup<PlacedFeature>
.precipitation(false)
.temperature(2.0F)
.downfall(0.0F)
.effects(
new BiomeEffects.Builder()
.waterColor(4159204)
.waterFogColor(329011)
.fogColor(524562)
.skyColor(OverworldBiomeCreator.getSkyColor(2.0F))
.particleConfig(new BiomeParticleConfig(ParticleTypes.WARPED_SPORE, 0.01428F)) //TODO
.loopSound(SoundEvents.AMBIENT_WARPED_FOREST_LOOP) //TODO
.moodSound(new BiomeMoodSound(SoundEvents.AMBIENT_WARPED_FOREST_MOOD, 6000, 8, 2.0)) //TODO
.additionsSound(new BiomeAdditionsSound(SoundEvents.AMBIENT_WARPED_FOREST_ADDITIONS, 0.0111)) //TODO
.music(MusicType.createIngameMusic(SoundEvents.MUSIC_NETHER_WARPED_FOREST)) //TODO
.build()
)
.effects(new BiomeEffects.Builder().waterColor(4159204).build())
.setEnvironmentAttribute(EnvironmentAttributes.AMBIENT_PARTICLES_VISUAL, List.of(new AmbientParticle(ParticleTypes.WARPED_SPORE, 0.01428F))) //TODO
.setEnvironmentAttribute(EnvironmentAttributes.FOG_COLOR_VISUAL, 524562)
.setEnvironmentAttribute(EnvironmentAttributes.AMBIENT_SOUNDS_AUDIO, new AmbientSounds(
Optional.of(SoundEvents.AMBIENT_WARPED_FOREST_LOOP),
Optional.of(new BiomeMoodSound(SoundEvents.AMBIENT_WARPED_FOREST_MOOD, 6000, 8, 2.0)),
List.of(new BiomeAdditionsSound(SoundEvents.AMBIENT_WARPED_FOREST_ADDITIONS, 0.0111))
))
.setEnvironmentAttribute(EnvironmentAttributes.BACKGROUND_MUSIC_AUDIO, new BackgroundMusic(MusicType.createIngameMusic(SoundEvents.MUSIC_NETHER_WARPED_FOREST)))
.spawnSettings(spawnSettings)
.generationSettings(lookupBackedBuilder.build())
.build();
Expand All @@ -252,51 +248,7 @@ private static void addBasicFeatures(GenerationSettings.LookupBackedBuilder gene
DefaultBiomeFeatures.addFrozenTopLayer(generationSettings);
}

private static Biome createBiome(
boolean precipitation,
float temperature,
float downfall,
SpawnSettings.Builder spawnSettings,
GenerationSettings.LookupBackedBuilder generationSettings,
@Nullable MusicSound music
) {
return createBiome(precipitation, temperature, downfall, 4159204, 329011, null, null, spawnSettings, generationSettings, music);
}

private static Biome createBiome(
boolean precipitation,
float temperature,
float downfall,
int waterColor,
int waterFogColor,
@Nullable Integer grassColor,
@Nullable Integer foliageColor,
SpawnSettings.Builder spawnSettings,
GenerationSettings.LookupBackedBuilder generationSettings,
@Nullable MusicSound music
) {
BiomeEffects.Builder builder = new BiomeEffects.Builder()
.waterColor(waterColor)
.waterFogColor(waterFogColor)
.fogColor(12638463)
.skyColor(OverworldBiomeCreator.getSkyColor(temperature))
.moodSound(BiomeMoodSound.CAVE)
.music(music);
if (grassColor != null) {
builder.grassColor(grassColor);
}

if (foliageColor != null) {
builder.foliageColor(foliageColor);
}

return new Biome.Builder()
.precipitation(precipitation)
.temperature(temperature)
.downfall(downfall)
.effects(builder.build())
.spawnSettings(spawnSettings.build())
.generationSettings(generationSettings.build())
.build();
}
public static Biome.Builder biome(float temperature, float downfall) {
return (new Biome.Builder()).precipitation(true).temperature(temperature).downfall(downfall).setEnvironmentAttribute(EnvironmentAttributes.SKY_COLOR_VISUAL, OverworldBiomeCreator.getSkyColor(temperature)).effects((new BiomeEffects.Builder()).waterColor(4159204).build());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,6 @@ protected void configure(RegistryWrapper.WrapperLookup wrapperLookup) {
builder(BiomeTags.SPAWNS_COLD_VARIANT_FROGS).add(GLACARIAN_TAIGA);
builder(BiomeTags.SPAWNS_SNOW_FOXES).add(GLACARIAN_TAIGA);
builder(BiomeTags.SPAWNS_WHITE_RABBITS).add(GLACARIAN_TAIGA);
builder(BiomeTags.SNOW_GOLEM_MELTS).add(DARK_AMARANTH_FOREST);

// Conventional
builder(PRIMARY_WOOD_TYPE_SAKURA).addTag(SAKURA_GROVES);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,7 @@ public void generate() {
addDrop(PromenadeBlocks.SAKURA_PRESSURE_PLATE);
addDrop(PromenadeBlocks.SAKURA_SIGN);
addDrop(PromenadeBlocks.SAKURA_HANGING_SIGN);
addDrop(PromenadeBlocks.SAKURA_SHELF);

addDrop(PromenadeBlocks.BLUSH_SAKURA_SAPLING);
addPottedPlantDrops(PromenadeBlocks.POTTED_BLUSH_SAKURA_SAPLING);
Expand Down Expand Up @@ -136,6 +137,7 @@ public void generate() {
addDrop(PromenadeBlocks.MAPLE_PRESSURE_PLATE);
addDrop(PromenadeBlocks.MAPLE_SIGN);
addDrop(PromenadeBlocks.MAPLE_HANGING_SIGN);
addDrop(PromenadeBlocks.MAPLE_SHELF);

addDrop(PromenadeBlocks.SAP_MAPLE_SAPLING);
addPottedPlantDrops(PromenadeBlocks.POTTED_SAP_MAPLE_SAPLING);
Expand Down Expand Up @@ -180,6 +182,7 @@ public void generate() {
addDrop(PromenadeBlocks.PALM_PRESSURE_PLATE);
addDrop(PromenadeBlocks.PALM_SIGN);
addDrop(PromenadeBlocks.PALM_HANGING_SIGN);
addDrop(PromenadeBlocks.PALM_SHELF);

addDrop(PromenadeBlocks.PALM_SAPLING);
addPottedPlantDrops(PromenadeBlocks.POTTED_PALM_SAPLING);
Expand Down Expand Up @@ -208,6 +211,7 @@ public void generate() {
addDrop(PromenadeBlocks.DARK_AMARANTH_PRESSURE_PLATE);
addDrop(PromenadeBlocks.DARK_AMARANTH_SIGN);
addDrop(PromenadeBlocks.DARK_AMARANTH_HANGING_SIGN);
addDrop(PromenadeBlocks.DARK_AMARANTH_SHELF);

addDrop(PromenadeBlocks.DARK_AMARANTH_FUNGUS);
addPottedPlantDrops(PromenadeBlocks.POTTED_DARK_AMARANTH_FUNGUS);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,7 @@ protected void configure(RegistryWrapper.WrapperLookup wrapperLookup) {
valueLookupBuilder(BlockTags.WALL_SIGNS).add(SAKURA_WALL_SIGN, MAPLE_WALL_SIGN, PALM_WALL_SIGN, DARK_AMARANTH_WALL_SIGN);
valueLookupBuilder(BlockTags.CEILING_HANGING_SIGNS).add(SAKURA_HANGING_SIGN, MAPLE_HANGING_SIGN, PALM_HANGING_SIGN, DARK_AMARANTH_HANGING_SIGN);
valueLookupBuilder(BlockTags.WALL_HANGING_SIGNS).add(SAKURA_WALL_HANGING_SIGN, MAPLE_WALL_HANGING_SIGN, PALM_WALL_HANGING_SIGN, DARK_AMARANTH_WALL_HANGING_SIGN);
valueLookupBuilder(BlockTags.WOODEN_SHELVES).add(SAKURA_SHELF, MAPLE_SHELF, PALM_SHELF, DARK_AMARANTH_SHELF);

valueLookupBuilder(BlockTags.LEAVES).add(
VERMILION_MAPLE_LEAVES,
Expand Down Expand Up @@ -172,6 +173,7 @@ protected void configure(RegistryWrapper.WrapperLookup wrapperLookup) {
valueLookupBuilder(BlockTags.COMBINATION_STEP_SOUND_BLOCKS).add(DARK_AMARANTH_ROOTS);

valueLookupBuilder(BlockTags.CLIMBABLE).add(COILED_VINES, COILED_VINES_PLANT);
valueLookupBuilder(BlockTags.CAN_GLIDE_THROUGH).add(COILED_VINES, COILED_VINES_PLANT);
valueLookupBuilder(BlockTags.REPLACEABLE).addTag(FALLEN_LEAVES);

valueLookupBuilder(BlockTags.SWORD_EFFICIENT)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ protected void configure(RegistryWrapper.WrapperLookup wrapperLookup) {
valueLookupBuilder(EntityTypeTags.BOAT).add(SAKURA_BOAT, MAPLE_BOAT, PALM_BOAT);
valueLookupBuilder(EntityTypeTags.AQUATIC).add(SUNKEN, CAPYBARA);

valueLookupBuilder(EntityTypeTags.BURN_IN_DAYLIGHT).add(SUNKEN);

valueLookupBuilder(EntityTypeTags.AXOLOTL_ALWAYS_HOSTILES).add(SUNKEN);
valueLookupBuilder(EntityTypeTags.FREEZE_IMMUNE_ENTITY_TYPES).add(DUCK);
valueLookupBuilder(EntityTypeTags.FALL_DAMAGE_IMMUNE).add(DUCK);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ protected void configure(RegistryWrapper.WrapperLookup wrapperLookup) {
copy(BlockTags.SOUL_FIRE_BASE_BLOCKS, ItemTags.SOUL_FIRE_BASE_BLOCKS);
copy(BlockTags.STANDING_SIGNS, ItemTags.SIGNS);
copy(BlockTags.CEILING_HANGING_SIGNS, ItemTags.HANGING_SIGNS);
copy(BlockTags.WOODEN_SHELVES, ItemTags.WOODEN_SHELVES);

valueLookupBuilder(ItemTags.BOATS).add(SAKURA_BOAT, MAPLE_BOAT, PALM_BOAT);
valueLookupBuilder(ItemTags.CHEST_BOATS).add(SAKURA_CHEST_BOAT, MAPLE_CHEST_BOAT, PALM_CHEST_BOAT);
Expand Down
Loading