diff --git a/build.gradle b/build.gradle index d966b5cf..2e610636 100644 --- a/build.gradle +++ b/build.gradle @@ -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 { diff --git a/docs/_meta.json b/docs/_meta.json index 1377aa1b..18b38b6b 100644 --- a/docs/_meta.json +++ b/docs/_meta.json @@ -1,3 +1,4 @@ { + "customize": "Customize", "configuration.mdx": "⚙️ Configuration" } \ No newline at end of file diff --git a/docs/customize/_meta.json b/docs/customize/_meta.json new file mode 100644 index 00000000..6f920edd --- /dev/null +++ b/docs/customize/_meta.json @@ -0,0 +1,3 @@ +{ + "mob_variants.mdx": "Mob Variants" +} \ No newline at end of file diff --git a/docs/customize/mob_variants.mdx b/docs/customize/mob_variants.mdx new file mode 100644 index 00000000..3be6fc3d --- /dev/null +++ b/docs/customize/mob_variants.mdx @@ -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//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//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//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). \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index dd68126b..5e69e2f9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -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 \ No newline at end of file +biolith_version=3.5.0-beta.3 \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ca025c83..23449a2b 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -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 diff --git a/src/client/java/fr/hugman/promenade/client/render/block/PromenadeBlockRenderLayers.java b/src/client/java/fr/hugman/promenade/client/render/block/PromenadeBlockRenderLayers.java index 34ea023f..182fd2e7 100644 --- a/src/client/java/fr/hugman/promenade/client/render/block/PromenadeBlockRenderLayers.java +++ b/src/client/java/fr/hugman/promenade/client/render/block/PromenadeBlockRenderLayers.java @@ -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, diff --git a/src/client/resources/assets/promenade/textures/block/dark_amaranth_shelf.png b/src/client/resources/assets/promenade/textures/block/dark_amaranth_shelf.png new file mode 100644 index 00000000..859f7867 Binary files /dev/null and b/src/client/resources/assets/promenade/textures/block/dark_amaranth_shelf.png differ diff --git a/src/client/resources/assets/promenade/textures/block/maple_shelf.png b/src/client/resources/assets/promenade/textures/block/maple_shelf.png new file mode 100644 index 00000000..ce88e925 Binary files /dev/null and b/src/client/resources/assets/promenade/textures/block/maple_shelf.png differ diff --git a/src/client/resources/assets/promenade/textures/block/palm_shelf.png b/src/client/resources/assets/promenade/textures/block/palm_shelf.png new file mode 100644 index 00000000..cfca9c59 Binary files /dev/null and b/src/client/resources/assets/promenade/textures/block/palm_shelf.png differ diff --git a/src/client/resources/assets/promenade/textures/block/sakura_shelf.png b/src/client/resources/assets/promenade/textures/block/sakura_shelf.png new file mode 100644 index 00000000..92d35d70 Binary files /dev/null and b/src/client/resources/assets/promenade/textures/block/sakura_shelf.png differ diff --git a/src/datagen/java/fr/hugman/promenade/data/provider/PromenadeBiomeProvider.java b/src/datagen/java/fr/hugman/promenade/data/provider/PromenadeBiomeProvider.java index d63e8357..b215bf62 100644 --- a/src/datagen/java/fr/hugman/promenade/data/provider/PromenadeBiomeProvider.java +++ b/src/datagen/java/fr/hugman/promenade/data/provider/PromenadeBiomeProvider.java @@ -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 { @@ -75,23 +83,20 @@ public static Biome createSakuraGroves(RegistryEntryLookup 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 features, RegistryEntryLookup> carvers) { @@ -116,22 +121,20 @@ public static Biome createCarnelianTreeway(RegistryEntryLookup 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 featureLookup, RegistryEntryLookup> carverLookup) { @@ -185,20 +188,17 @@ public static Biome createGlacarianTaiga(RegistryEntryLookup 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 featureLookup, RegistryEntryLookup> carverLookup) { @@ -225,19 +225,15 @@ public static Biome createDarkAmaranthForest(RegistryEntryLookup .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(); @@ -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()); + } } \ No newline at end of file diff --git a/src/datagen/java/fr/hugman/promenade/data/provider/PromenadeBiomeTagProvider.java b/src/datagen/java/fr/hugman/promenade/data/provider/PromenadeBiomeTagProvider.java index 6f34b3b3..ddbb8ea6 100644 --- a/src/datagen/java/fr/hugman/promenade/data/provider/PromenadeBiomeTagProvider.java +++ b/src/datagen/java/fr/hugman/promenade/data/provider/PromenadeBiomeTagProvider.java @@ -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); diff --git a/src/datagen/java/fr/hugman/promenade/data/provider/PromenadeBlockLootTableProvider.java b/src/datagen/java/fr/hugman/promenade/data/provider/PromenadeBlockLootTableProvider.java index 0a01a9c9..5b99583f 100644 --- a/src/datagen/java/fr/hugman/promenade/data/provider/PromenadeBlockLootTableProvider.java +++ b/src/datagen/java/fr/hugman/promenade/data/provider/PromenadeBlockLootTableProvider.java @@ -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); @@ -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); @@ -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); @@ -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); diff --git a/src/datagen/java/fr/hugman/promenade/data/provider/PromenadeBlockTagProvider.java b/src/datagen/java/fr/hugman/promenade/data/provider/PromenadeBlockTagProvider.java index e2128614..50fcceb9 100644 --- a/src/datagen/java/fr/hugman/promenade/data/provider/PromenadeBlockTagProvider.java +++ b/src/datagen/java/fr/hugman/promenade/data/provider/PromenadeBlockTagProvider.java @@ -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, @@ -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) diff --git a/src/datagen/java/fr/hugman/promenade/data/provider/PromenadeEntityTypeTagProvider.java b/src/datagen/java/fr/hugman/promenade/data/provider/PromenadeEntityTypeTagProvider.java index 05e9be3f..3ffd6289 100644 --- a/src/datagen/java/fr/hugman/promenade/data/provider/PromenadeEntityTypeTagProvider.java +++ b/src/datagen/java/fr/hugman/promenade/data/provider/PromenadeEntityTypeTagProvider.java @@ -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); diff --git a/src/datagen/java/fr/hugman/promenade/data/provider/PromenadeItemTagProvider.java b/src/datagen/java/fr/hugman/promenade/data/provider/PromenadeItemTagProvider.java index e63aa61c..564f7782 100644 --- a/src/datagen/java/fr/hugman/promenade/data/provider/PromenadeItemTagProvider.java +++ b/src/datagen/java/fr/hugman/promenade/data/provider/PromenadeItemTagProvider.java @@ -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); diff --git a/src/datagen/java/fr/hugman/promenade/data/provider/PromenadeModelProvider.java b/src/datagen/java/fr/hugman/promenade/data/provider/PromenadeModelProvider.java index ef81cfc6..907f8a1d 100644 --- a/src/datagen/java/fr/hugman/promenade/data/provider/PromenadeModelProvider.java +++ b/src/datagen/java/fr/hugman/promenade/data/provider/PromenadeModelProvider.java @@ -109,6 +109,7 @@ public void generateBlockStateModels(BlockStateModelGenerator gen) { gen.createLogTexturePool(PromenadeBlocks.SAKURA_LOG).uvLockedLog(PromenadeBlocks.SAKURA_LOG).wood(PromenadeBlocks.SAKURA_WOOD); gen.createLogTexturePool(PromenadeBlocks.STRIPPED_SAKURA_LOG).uvLockedLog(PromenadeBlocks.STRIPPED_SAKURA_LOG).wood(PromenadeBlocks.STRIPPED_SAKURA_WOOD); gen.registerHangingSign(PromenadeBlocks.STRIPPED_SAKURA_LOG, PromenadeBlocks.SAKURA_HANGING_SIGN, PromenadeBlocks.SAKURA_WALL_HANGING_SIGN); + gen.registerShelf(PromenadeBlocks.SAKURA_SHELF, PromenadeBlocks.STRIPPED_SAKURA_LOG); gen.registerFlowerPotPlantAndItem(PromenadeBlocks.BLUSH_SAKURA_SAPLING, PromenadeBlocks.POTTED_BLUSH_SAKURA_SAPLING, BlockStateModelGenerator.CrossType.NOT_TINTED); gen.registerFlowerPotPlantAndItem(PromenadeBlocks.COTTON_SAKURA_SAPLING, PromenadeBlocks.POTTED_COTTON_SAKURA_SAPLING, BlockStateModelGenerator.CrossType.NOT_TINTED); gen.registerSingleton(PromenadeBlocks.BLUSH_SAKURA_BLOSSOMS, TexturedModel.LEAVES); @@ -122,6 +123,7 @@ public void generateBlockStateModels(BlockStateModelGenerator gen) { registerDripLog(gen, PromenadeBlocks.STRIPPED_MAPLE_LOG); gen.createLogTexturePool(PromenadeBlocks.STRIPPED_MAPLE_LOG).wood(PromenadeBlocks.STRIPPED_MAPLE_WOOD); gen.registerHangingSign(PromenadeBlocks.STRIPPED_MAPLE_LOG, PromenadeBlocks.MAPLE_HANGING_SIGN, PromenadeBlocks.MAPLE_WALL_HANGING_SIGN); + gen.registerShelf(PromenadeBlocks.MAPLE_SHELF, PromenadeBlocks.STRIPPED_MAPLE_LOG); gen.registerFlowerPotPlantAndItem(PromenadeBlocks.SAP_MAPLE_SAPLING, PromenadeBlocks.POTTED_SAP_MAPLE_SAPLING, BlockStateModelGenerator.CrossType.NOT_TINTED); gen.registerFlowerPotPlantAndItem(PromenadeBlocks.VERMILION_MAPLE_SAPLING, PromenadeBlocks.POTTED_VERMILION_MAPLE_SAPLING, BlockStateModelGenerator.CrossType.NOT_TINTED); gen.registerFlowerPotPlantAndItem(PromenadeBlocks.FULVOUS_MAPLE_SAPLING, PromenadeBlocks.POTTED_FULVOUS_MAPLE_SAPLING, BlockStateModelGenerator.CrossType.NOT_TINTED); @@ -146,6 +148,7 @@ public void generateBlockStateModels(BlockStateModelGenerator gen) { gen.createLogTexturePool(PromenadeBlocks.PALM_LOG).log(PromenadeBlocks.PALM_LOG).wood(PromenadeBlocks.PALM_WOOD); gen.createLogTexturePool(PromenadeBlocks.STRIPPED_PALM_LOG).log(PromenadeBlocks.STRIPPED_PALM_LOG).wood(PromenadeBlocks.STRIPPED_PALM_WOOD); gen.registerHangingSign(PromenadeBlocks.STRIPPED_PALM_LOG, PromenadeBlocks.PALM_HANGING_SIGN, PromenadeBlocks.PALM_WALL_HANGING_SIGN); + gen.registerShelf(PromenadeBlocks.PALM_SHELF, PromenadeBlocks.STRIPPED_PALM_LOG); gen.registerFlowerPotPlantAndItem(PromenadeBlocks.PALM_SAPLING, PromenadeBlocks.POTTED_PALM_SAPLING, BlockStateModelGenerator.CrossType.NOT_TINTED); gen.registerTintedBlockAndItem(PromenadeBlocks.PALM_LEAVES, TexturedModel.LEAVES, PromenadeFoliageColors.PALM); this.registerSnowyLeaves(gen, PromenadeBlocks.SNOWY_PALM_LEAVES, PromenadeBlocks.PALM_LEAVES, PromenadeFoliageColors.PALM); @@ -159,6 +162,7 @@ public void generateBlockStateModels(BlockStateModelGenerator gen) { gen.createLogTexturePool(PromenadeBlocks.DARK_AMARANTH_STEM).stem(PromenadeBlocks.DARK_AMARANTH_STEM).wood(PromenadeBlocks.DARK_AMARANTH_HYPHAE); gen.createLogTexturePool(PromenadeBlocks.STRIPPED_DARK_AMARANTH_STEM).stem(PromenadeBlocks.STRIPPED_DARK_AMARANTH_STEM).wood(PromenadeBlocks.STRIPPED_DARK_AMARANTH_HYPHAE); gen.registerHangingSign(PromenadeBlocks.STRIPPED_DARK_AMARANTH_STEM, PromenadeBlocks.DARK_AMARANTH_HANGING_SIGN, PromenadeBlocks.DARK_AMARANTH_WALL_HANGING_SIGN); + gen.registerShelf(PromenadeBlocks.DARK_AMARANTH_SHELF, PromenadeBlocks.STRIPPED_DARK_AMARANTH_STEM); gen.registerFlowerPotPlantAndItem(PromenadeBlocks.DARK_AMARANTH_FUNGUS, PromenadeBlocks.POTTED_DARK_AMARANTH_FUNGUS, BlockStateModelGenerator.CrossType.NOT_TINTED); gen.registerSimpleCubeAll(PromenadeBlocks.SOUL_SHROOMLIGHT); @@ -221,7 +225,7 @@ private void registerMoai(BlockStateModelGenerator gen) { .register(MoaiType.TOP, BlockStateModelGenerator.createWeightedVariant(ModelIds.getBlockSubModelId(PromenadeBlocks.MOAI, "_top"))) .register(MoaiType.BOTTOM, BlockStateModelGenerator.createWeightedVariant(ModelIds.getBlockSubModelId(PromenadeBlocks.MOAI, "_bottom"))) ) - .coordinate(NORTH_DEFAULT_HORIZONTAL_ROTATION_OPERATIONS) + .apply(NORTH_DEFAULT_HORIZONTAL_ROTATION_OPERATIONS) ); } @@ -304,7 +308,7 @@ public final void registerFacingTintableCrossBlockState(BlockStateModelGenerator WeightedVariant weightedVariant = BlockStateModelGenerator.createWeightedVariant(tintType.getCrossModel().upload(block, crossTexture, gen.modelCollector)); gen.blockStateCollector.accept( BlockStateModelGenerator.createSingletonBlockState(block, weightedVariant) - .coordinate(UP_DEFAULT_ROTATION_OPERATIONS) + .apply(UP_DEFAULT_ROTATION_OPERATIONS) ); } diff --git a/src/datagen/java/fr/hugman/promenade/data/provider/PromenadeRecipeGenerator.java b/src/datagen/java/fr/hugman/promenade/data/provider/PromenadeRecipeGenerator.java index b1522e74..5a5d8637 100644 --- a/src/datagen/java/fr/hugman/promenade/data/provider/PromenadeRecipeGenerator.java +++ b/src/datagen/java/fr/hugman/promenade/data/provider/PromenadeRecipeGenerator.java @@ -89,6 +89,7 @@ public void generate() { this.offerBarkBlockRecipe(PromenadeBlocks.SAKURA_WOOD, PromenadeBlocks.SAKURA_LOG); this.offerBarkBlockRecipe(PromenadeBlocks.STRIPPED_SAKURA_WOOD, PromenadeBlocks.STRIPPED_SAKURA_LOG); this.offerHangingSignRecipe(PromenadeItems.SAKURA_HANGING_SIGN, PromenadeBlocks.STRIPPED_SAKURA_LOG); + this.offerShelfRecipe(PromenadeBlocks.SAKURA_SHELF, PromenadeBlocks.STRIPPED_SAKURA_LOG); this.offerSnowyLeavesRecipe(PromenadeBlocks.SNOWY_BLUSH_SAKURA_BLOSSOMS, PromenadeBlocks.BLUSH_SAKURA_BLOSSOMS); this.offerSnowyLeavesRecipe(PromenadeBlocks.SNOWY_COTTON_SAKURA_BLOSSOMS, PromenadeBlocks.COTTON_SAKURA_BLOSSOMS); this.offerLeafPileRecipe(PromenadeBlocks.BLUSH_SAKURA_BLOSSOM_PILE, PromenadeBlocks.BLUSH_SAKURA_BLOSSOM_PILE); @@ -100,6 +101,7 @@ public void generate() { this.offerBarkBlockRecipe(PromenadeBlocks.MAPLE_WOOD, PromenadeBlocks.MAPLE_LOG); this.offerBarkBlockRecipe(PromenadeBlocks.STRIPPED_MAPLE_WOOD, PromenadeBlocks.STRIPPED_MAPLE_LOG); this.offerHangingSignRecipe(PromenadeItems.MAPLE_HANGING_SIGN, PromenadeBlocks.STRIPPED_MAPLE_LOG); + this.offerShelfRecipe(PromenadeBlocks.MAPLE_SHELF, PromenadeBlocks.STRIPPED_MAPLE_LOG); this.offerSnowyLeavesRecipe(PromenadeBlocks.SNOWY_SAP_MAPLE_LEAVES, PromenadeBlocks.SAP_MAPLE_LEAVES); this.offerSnowyLeavesRecipe(PromenadeBlocks.SNOWY_VERMILION_MAPLE_LEAVES, PromenadeBlocks.VERMILION_MAPLE_LEAVES); this.offerSnowyLeavesRecipe(PromenadeBlocks.SNOWY_FULVOUS_MAPLE_LEAVES, PromenadeBlocks.FULVOUS_MAPLE_LEAVES); @@ -119,6 +121,7 @@ public void generate() { this.offerBarkBlockRecipe(PromenadeBlocks.PALM_WOOD, PromenadeBlocks.PALM_LOG); this.offerBarkBlockRecipe(PromenadeBlocks.STRIPPED_PALM_WOOD, PromenadeBlocks.STRIPPED_PALM_LOG); this.offerHangingSignRecipe(PromenadeItems.PALM_HANGING_SIGN, PromenadeBlocks.STRIPPED_PALM_LOG); + this.offerShelfRecipe(PromenadeBlocks.PALM_SHELF, PromenadeBlocks.STRIPPED_PALM_LOG); this.offerSnowyLeavesRecipe(PromenadeBlocks.SNOWY_PALM_LEAVES, PromenadeBlocks.PALM_LEAVES); this.offerLeafPileRecipe(PromenadeBlocks.PALM_LEAF_PILE, PromenadeBlocks.PALM_LEAVES); this.offerBoatRecipe(PromenadeItems.PALM_BOAT, PromenadeBlocks.PALM_PLANKS); @@ -128,6 +131,7 @@ public void generate() { this.offerBarkBlockRecipe(PromenadeBlocks.DARK_AMARANTH_HYPHAE, PromenadeBlocks.DARK_AMARANTH_STEM); this.offerBarkBlockRecipe(PromenadeBlocks.STRIPPED_DARK_AMARANTH_HYPHAE, PromenadeBlocks.STRIPPED_DARK_AMARANTH_STEM); this.offerHangingSignRecipe(PromenadeItems.DARK_AMARANTH_HANGING_SIGN, PromenadeBlocks.STRIPPED_DARK_AMARANTH_STEM); + this.offerShelfRecipe(PromenadeBlocks.DARK_AMARANTH_SHELF, PromenadeBlocks.STRIPPED_DARK_AMARANTH_STEM); this.offerStonecuttingRecipe(RecipeCategory.BUILDING_BLOCKS, PromenadeBlocks.MOAI, Blocks.TUFF); diff --git a/src/main/java/fr/hugman/promenade/block/BerryBushBlock.java b/src/main/java/fr/hugman/promenade/block/BerryBushBlock.java index afd6ae87..13595040 100644 --- a/src/main/java/fr/hugman/promenade/block/BerryBushBlock.java +++ b/src/main/java/fr/hugman/promenade/block/BerryBushBlock.java @@ -92,8 +92,8 @@ protected void randomTick(BlockState state, ServerWorld world, BlockPos pos, Ran } } - @Override - protected void onEntityCollision(BlockState state, World world, BlockPos pos, Entity entity, EntityCollisionHandler handler) { + @Override + protected void onEntityCollision(BlockState state, World world, BlockPos pos, Entity entity, EntityCollisionHandler handler, boolean bl) { if (!(entity instanceof LivingEntity) || entity.getType() == EntityType.FOX || entity.getType() == EntityType.BEE) { return; } diff --git a/src/main/java/fr/hugman/promenade/block/PromenadeBlocks.java b/src/main/java/fr/hugman/promenade/block/PromenadeBlocks.java index dfcc16aa..f78b6d79 100644 --- a/src/main/java/fr/hugman/promenade/block/PromenadeBlocks.java +++ b/src/main/java/fr/hugman/promenade/block/PromenadeBlocks.java @@ -12,10 +12,7 @@ import fr.hugman.promenade.tag.PromenadeBlockTags; import fr.hugman.promenade.world.PromenadeSaplingGenerators; import fr.hugman.promenade.world.gen.feature.PromenadeConfiguredFeatures; -import net.minecraft.block.AbstractBlock; -import net.minecraft.block.Block; -import net.minecraft.block.Blocks; -import net.minecraft.block.MapColor; +import net.minecraft.block.*; import net.minecraft.block.enums.NoteBlockInstrument; import net.minecraft.block.piston.PistonBehavior; import net.minecraft.entity.EquipmentSlot; @@ -115,6 +112,7 @@ public class PromenadeBlocks { public static final Block SAKURA_WALL_SIGN = register("sakura_wall_sign", BlockFactory.wallSign(SAKURA_PLANKS, PromenadeWoodTypes.SAKURA)); public static final Block SAKURA_HANGING_SIGN = register("sakura_hanging_sign", BlockFactory.hangingSign(SAKURA_PLANKS, PromenadeWoodTypes.SAKURA, BlockSoundGroup.CHERRY_WOOD_HANGING_SIGN)); public static final Block SAKURA_WALL_HANGING_SIGN = register("sakura_wall_hanging_sign", BlockFactory.wallHangingSign(SAKURA_PLANKS, PromenadeWoodTypes.SAKURA, BlockSoundGroup.CHERRY_WOOD_HANGING_SIGN)); + public static final Block SAKURA_SHELF = register("sakura_shelf", BlockFactory.shelf(SAKURA_PLANKS)); public static final Block BLUSH_SAKURA_SAPLING = register("blush_sakura_sapling", BlockFactory.sapling(PromenadeMapColors.BLUSH_BLOSSOMS, PromenadeSaplingGenerators.BLUSH_SAKURA)); public static final Block POTTED_BLUSH_SAKURA_SAPLING = register("potted_blush_sakura_sapling", BlockFactory.pot(BLUSH_SAKURA_SAPLING)); @@ -150,6 +148,7 @@ public class PromenadeBlocks { public static final Block MAPLE_WALL_SIGN = register("maple_wall_sign", BlockFactory.wallSign(MAPLE_PLANKS, PromenadeWoodTypes.MAPLE)); public static final Block MAPLE_HANGING_SIGN = register("maple_hanging_sign", BlockFactory.hangingSign(MAPLE_PLANKS, PromenadeWoodTypes.MAPLE, BlockSoundGroup.CHERRY_WOOD_HANGING_SIGN)); public static final Block MAPLE_WALL_HANGING_SIGN = register("maple_wall_hanging_sign", BlockFactory.wallHangingSign(MAPLE_PLANKS, PromenadeWoodTypes.MAPLE, BlockSoundGroup.CHERRY_WOOD_HANGING_SIGN)); + public static final Block MAPLE_SHELF = register("maple_shelf", BlockFactory.shelf(MAPLE_PLANKS)); public static final Block SAP_MAPLE_SAPLING = register("sap_maple_sapling", BlockFactory.sapling(PromenadeMapColors.SAP_MAPLE_LEAVES, PromenadeSaplingGenerators.SAP_MAPLE)); public static final Block POTTED_SAP_MAPLE_SAPLING = register("potted_sap_maple_sapling", BlockFactory.pot(SAP_MAPLE_SAPLING)); @@ -201,6 +200,7 @@ public class PromenadeBlocks { public static final Block PALM_WALL_SIGN = register("palm_wall_sign", BlockFactory.wallSign(PALM_PLANKS, PromenadeWoodTypes.PALM)); public static final Block PALM_HANGING_SIGN = register("palm_hanging_sign", BlockFactory.hangingSign(PALM_PLANKS, PromenadeWoodTypes.PALM, BlockSoundGroup.HANGING_SIGN)); public static final Block PALM_WALL_HANGING_SIGN = register("palm_wall_hanging_sign", BlockFactory.wallHangingSign(PALM_PLANKS, PromenadeWoodTypes.PALM, BlockSoundGroup.HANGING_SIGN)); + public static final Block PALM_SHELF = register("palm_shelf", BlockFactory.shelf(PALM_PLANKS)); public static final Block PALM_SAPLING = register("palm_sapling", BlockFactory.sapling(PromenadeMapColors.PALM_LEAVES, PromenadeSaplingGenerators.PALM, state -> state.isIn(BlockTags.SAND))); public static final Block POTTED_PALM_SAPLING = register("potted_palm_sapling", BlockFactory.pot(PALM_SAPLING)); @@ -253,6 +253,7 @@ public class PromenadeBlocks { public static final Block DARK_AMARANTH_WALL_SIGN = register("dark_amaranth_wall_sign", BlockFactory.wallSign(DARK_AMARANTH_PLANKS, PromenadeWoodTypes.DARK_AMARANTH)); public static final Block DARK_AMARANTH_HANGING_SIGN = register("dark_amaranth_hanging_sign", BlockFactory.hangingSign(DARK_AMARANTH_PLANKS, PromenadeWoodTypes.DARK_AMARANTH, BlockSoundGroup.NETHER_WOOD_HANGING_SIGN)); public static final Block DARK_AMARANTH_WALL_HANGING_SIGN = register("dark_amaranth_wall_hanging_sign", BlockFactory.wallHangingSign(DARK_AMARANTH_PLANKS, PromenadeWoodTypes.DARK_AMARANTH, BlockSoundGroup.NETHER_WOOD_HANGING_SIGN)); + public static final Block DARK_AMARANTH_SHELF = register("dark_amaranth_shelf", BlockFactory.shelf(DARK_AMARANTH_PLANKS)); public static final Block DARK_AMARANTH_FUNGUS = register("dark_amaranth_fungus", BlockFactory.fungus(MapColor.PURPLE, PromenadeConfiguredFeatures.PLANTED_DARK_AMARANTH_FUNGUS, PromenadeBlockTags.DARK_AMARANTH_FUNGUS_PLACEABLE_ON, PromenadeBlockTags.DARK_AMARANTH_FUNGUS_GROWABLE_ON)); public static final Block POTTED_DARK_AMARANTH_FUNGUS = register("potted_dark_amaranth_fungus", BlockFactory.pot(DARK_AMARANTH_FUNGUS)); diff --git a/src/main/java/fr/hugman/promenade/block/WitherRosePileBlock.java b/src/main/java/fr/hugman/promenade/block/WitherRosePileBlock.java index 7dc4dc82..873d9041 100644 --- a/src/main/java/fr/hugman/promenade/block/WitherRosePileBlock.java +++ b/src/main/java/fr/hugman/promenade/block/WitherRosePileBlock.java @@ -46,14 +46,14 @@ public void randomDisplayTick(BlockState state, World world, BlockPos pos, Rando } @Override - protected void onEntityCollision(BlockState state, World world, BlockPos pos, Entity entity, EntityCollisionHandler handler) { + protected void onEntityCollision(BlockState state, World world, BlockPos pos, Entity entity, EntityCollisionHandler handler, boolean bl) { if (world instanceof ServerWorld serverWorld && world.getDifficulty() != Difficulty.PEACEFUL && entity instanceof LivingEntity livingEntity && !livingEntity.isInvulnerableTo(serverWorld, world.getDamageSources().wither())) { livingEntity.addStatusEffect(this.getContactEffect()); } - super.onEntityCollision(state, world, pos, entity, handler); + super.onEntityCollision(state, world, pos, entity, handler, bl); } public StatusEffectInstance getContactEffect() { diff --git a/src/main/java/fr/hugman/promenade/block/entity/PromenadeBlockEntities.java b/src/main/java/fr/hugman/promenade/block/entity/PromenadeBlockEntities.java index c4a72a3a..085579b6 100644 --- a/src/main/java/fr/hugman/promenade/block/entity/PromenadeBlockEntities.java +++ b/src/main/java/fr/hugman/promenade/block/entity/PromenadeBlockEntities.java @@ -21,5 +21,10 @@ public static void addBlocksToVanillaBlockEntityTypes() { BlockEntityType.SIGN.addSupportedBlock(PromenadeBlocks.DARK_AMARANTH_WALL_SIGN); BlockEntityType.HANGING_SIGN.addSupportedBlock(PromenadeBlocks.DARK_AMARANTH_HANGING_SIGN); BlockEntityType.HANGING_SIGN.addSupportedBlock(PromenadeBlocks.DARK_AMARANTH_WALL_HANGING_SIGN); + + BlockEntityType.SHELF.addSupportedBlock(PromenadeBlocks.SAKURA_SHELF); + BlockEntityType.SHELF.addSupportedBlock(PromenadeBlocks.MAPLE_SHELF); + BlockEntityType.SHELF.addSupportedBlock(PromenadeBlocks.PALM_SHELF); + BlockEntityType.SHELF.addSupportedBlock(PromenadeBlocks.DARK_AMARANTH_SHELF); } } diff --git a/src/main/java/fr/hugman/promenade/block/helper/BlockFactory.java b/src/main/java/fr/hugman/promenade/block/helper/BlockFactory.java index a3d5fd83..80596e17 100644 --- a/src/main/java/fr/hugman/promenade/block/helper/BlockFactory.java +++ b/src/main/java/fr/hugman/promenade/block/helper/BlockFactory.java @@ -8,6 +8,8 @@ import net.minecraft.block.*; import net.minecraft.block.enums.NoteBlockInstrument; import net.minecraft.block.piston.PistonBehavior; +import net.minecraft.component.DataComponentTypes; +import net.minecraft.component.type.ContainerComponent; import net.minecraft.particle.ParticleEffect; import net.minecraft.registry.RegistryKey; import net.minecraft.registry.tag.TagKey; @@ -118,6 +120,10 @@ public static BlockBuilder wallHangingSign(Block standingSign, WoodType woodType .sounds(soundGroup)).noItem(); } + public static BlockBuilder shelf(Block planks) { + return copy(planks).factory(ShelfBlock::new).settings(AbstractBlock.Settings.copyShallow(planks).sounds(BlockSoundGroup.SHELF)).itemSettings((s -> s.component(DataComponentTypes.CONTAINER, ContainerComponent.DEFAULT))); + } + public static BlockBuilder log(MapColor woodColor, MapColor barkColor, BlockSoundGroup sounds, boolean flammable) { return log(woodColor, sounds, flammable) .settings(settings -> settings.mapColor((state) -> state.get(PillarBlock.AXIS) == Direction.Axis.Y ? woodColor : barkColor)); diff --git a/src/main/java/fr/hugman/promenade/entity/CapybaraEntity.java b/src/main/java/fr/hugman/promenade/entity/CapybaraEntity.java index 9e879130..5468325f 100644 --- a/src/main/java/fr/hugman/promenade/entity/CapybaraEntity.java +++ b/src/main/java/fr/hugman/promenade/entity/CapybaraEntity.java @@ -486,7 +486,7 @@ protected void initDataTracker(DataTracker.Builder builder) { @Override protected void writeCustomData(WriteView view) { super.writeCustomData(view); - Variants.writeVariantToNbt(view, this.getVariant()); + Variants.writeData(view, this.getVariant()); view.putFloat(FART_CHANCE_KEY, this.getFartChance()); view.putString(STATE_KEY, this.getState().asString()); @@ -496,7 +496,7 @@ protected void writeCustomData(WriteView view) { @Override protected void readCustomData(ReadView view) { super.readCustomData(view); - Variants.readVariantFromNbt(view, PromenadeRegistryKeys.CAPYBARA_VARIANT).ifPresent(this::setVariant); + Variants.fromData(view, PromenadeRegistryKeys.CAPYBARA_VARIANT).ifPresent(this::setVariant); view.getOptionalString(STATE_KEY).ifPresent(s -> this.setState(State.fromName(s))); view.getOptionalLong(LAST_STATE_TICK_KEY).ifPresent(this::setLastStateTick); diff --git a/src/main/java/fr/hugman/promenade/entity/DuckEntity.java b/src/main/java/fr/hugman/promenade/entity/DuckEntity.java index b7209319..a0047209 100644 --- a/src/main/java/fr/hugman/promenade/entity/DuckEntity.java +++ b/src/main/java/fr/hugman/promenade/entity/DuckEntity.java @@ -182,13 +182,13 @@ protected void initDataTracker(DataTracker.Builder builder) { @Override protected void writeCustomData(WriteView view) { super.writeCustomData(view); - Variants.writeVariantToNbt(view, this.getVariant()); + Variants.writeData(view, this.getVariant()); } @Override protected void readCustomData(ReadView view) { super.readCustomData(view); - Variants.readVariantFromNbt(view, PromenadeRegistryKeys.DUCK_VARIANT).ifPresent(this::setVariant); + Variants.fromData(view, PromenadeRegistryKeys.DUCK_VARIANT).ifPresent(this::setVariant); } @Nullable diff --git a/src/main/java/fr/hugman/promenade/entity/LushCreeperEntity.java b/src/main/java/fr/hugman/promenade/entity/LushCreeperEntity.java index 5dd0bb32..285f550a 100644 --- a/src/main/java/fr/hugman/promenade/entity/LushCreeperEntity.java +++ b/src/main/java/fr/hugman/promenade/entity/LushCreeperEntity.java @@ -11,11 +11,11 @@ import net.minecraft.server.world.ServerWorld; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.random.Random; -import net.minecraft.world.GameRules; import net.minecraft.world.ServerWorldAccess; import net.minecraft.world.World; import net.minecraft.world.gen.feature.ConfiguredFeature; import net.minecraft.world.gen.feature.UndergroundConfiguredFeatures; +import net.minecraft.world.rule.GameRules; import java.util.Collection; @@ -34,7 +34,7 @@ public static boolean canSpawn(EntityType type, ServerW protected void explode() { if (this.getEntityWorld() instanceof ServerWorld serverWorld) { boolean hasGeneratedMoss = false; - if (serverWorld.getGameRules().getBoolean(GameRules.DO_MOB_GRIEFING)) { + if (serverWorld.getGameRules().getValue(GameRules.DO_MOB_GRIEFING)) { Registry> registry = serverWorld.getRegistryManager().getOrThrow(RegistryKeys.CONFIGURED_FEATURE); for (int i = 0; i < EXPLOSION_Y_LENGTH; i++) { BlockPos pos = getBlockPos().down(i); diff --git a/src/main/java/fr/hugman/promenade/entity/PromenadeEntityTypes.java b/src/main/java/fr/hugman/promenade/entity/PromenadeEntityTypes.java index 5f204910..ff589742 100644 --- a/src/main/java/fr/hugman/promenade/entity/PromenadeEntityTypes.java +++ b/src/main/java/fr/hugman/promenade/entity/PromenadeEntityTypes.java @@ -54,14 +54,16 @@ public class PromenadeEntityTypes { .spawnRestriction(SpawnLocationTypes.ON_GROUND, Heightmap.Type.MOTION_BLOCKING_NO_LEAVES, LushCreeperEntity::canSpawn) ) .dimensions(0.6f, 1.7f) - .maxTrackingRange(8)); + .maxTrackingRange(8) + .notAllowedInPeaceful()); public static final EntityType SUNKEN = register("sunken", FabricEntityType.Builder.createMob(SunkenEntity::new, SpawnGroup.MONSTER, mob -> mob .defaultAttributes(SunkenEntity::createSunkenAttributes) .spawnRestriction(SpawnLocationTypes.IN_WATER, Heightmap.Type.MOTION_BLOCKING_NO_LEAVES, SunkenEntity::canSpawn) ) .dimensions(0.6F, 1.99F) .eyeHeight(1.74F) - .maxTrackingRange(8)); + .maxTrackingRange(8) + .notAllowedInPeaceful()); private static EntityType register(String path, EntityType.Builder type) { var key = RegistryKey.of(RegistryKeys.ENTITY_TYPE, Promenade.id(path)); diff --git a/src/main/java/fr/hugman/promenade/entity/SunkenEntity.java b/src/main/java/fr/hugman/promenade/entity/SunkenEntity.java index 26f5ee92..b5e5bf70 100644 --- a/src/main/java/fr/hugman/promenade/entity/SunkenEntity.java +++ b/src/main/java/fr/hugman/promenade/entity/SunkenEntity.java @@ -32,7 +32,10 @@ import net.minecraft.entity.projectile.PersistentProjectileEntity; import net.minecraft.entity.projectile.ProjectileUtil; import net.minecraft.entity.spawn.SpawnContext; -import net.minecraft.item.*; +import net.minecraft.item.BowItem; +import net.minecraft.item.CrossbowItem; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; import net.minecraft.registry.entry.RegistryEntry; import net.minecraft.registry.tag.FluidTags; import net.minecraft.sound.SoundEvent; @@ -172,12 +175,13 @@ protected void initEquipment(Random random, LocalDifficulty difficulty) { this.equipStack(EquipmentSlot.MAINHAND, new ItemStack(Items.CROSSBOW)); } - @Override - public boolean canUseRangedWeapon(RangedWeaponItem weapon) { - return weapon instanceof BowItem || weapon instanceof CrossbowItem; - } + @Override + public boolean canUseRangedWeapon(ItemStack stack) { + var weapon = stack.getItem(); + return weapon instanceof BowItem || weapon instanceof CrossbowItem; + } - @Override + @Override public void travel(Vec3d movementInput) { if (this.canMoveVoluntarily() && this.isTouchingWater()) { float speed = 0.075F; @@ -364,14 +368,14 @@ protected void initDataTracker(DataTracker.Builder builder) { @Override protected void writeCustomData(WriteView view) { super.writeCustomData(view); - Variants.writeVariantToNbt(view, this.getVariant()); + Variants.writeData(view, this.getVariant()); } @Override protected void readCustomData(ReadView view) { super.readCustomData(view); - Variants.readVariantFromNbt(view, PromenadeRegistryKeys.SUNKEN_VARIANT).ifPresent(this::setVariant); + Variants.fromData(view, PromenadeRegistryKeys.SUNKEN_VARIANT).ifPresent(this::setVariant); } @org.jetbrains.annotations.Nullable diff --git a/src/main/java/fr/hugman/promenade/itemgroup/PromenadeItemGroupAdditions.java b/src/main/java/fr/hugman/promenade/itemgroup/PromenadeItemGroupAdditions.java index a4a45bbf..da400a4f 100644 --- a/src/main/java/fr/hugman/promenade/itemgroup/PromenadeItemGroupAdditions.java +++ b/src/main/java/fr/hugman/promenade/itemgroup/PromenadeItemGroupAdditions.java @@ -5,10 +5,6 @@ import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents; import net.minecraft.block.Blocks; import net.minecraft.item.*; -import net.minecraft.registry.Registries; - -import java.util.Collections; -import java.util.function.Predicate; public class PromenadeItemGroupAdditions { public static void appendItemGroups() { @@ -184,16 +180,20 @@ public static void appendItemGroups() { ItemGroupEvents.modifyEntriesEvent(ItemGroups.BUILDING_BLOCKS).register(e -> e.addAfter(Blocks.CUT_RED_SANDSTONE_SLAB, PromenadeBlocks.MOAI)); ItemGroupEvents.modifyEntriesEvent(ItemGroups.FUNCTIONAL).register(e -> e.addAfter(Blocks.BIRCH_HANGING_SIGN, PromenadeItems.SAKURA_SIGN, PromenadeItems.SAKURA_HANGING_SIGN)); + ItemGroupEvents.modifyEntriesEvent(ItemGroups.FUNCTIONAL).register(e -> e.addAfter(Blocks.BIRCH_SHELF, PromenadeBlocks.SAKURA_SHELF)); ItemGroupEvents.modifyEntriesEvent(ItemGroups.TOOLS).register(e -> e.addAfter(Items.BIRCH_CHEST_BOAT, PromenadeItems.SAKURA_BOAT, PromenadeItems.SAKURA_CHEST_BOAT)); ItemGroupEvents.modifyEntriesEvent(ItemGroups.FUNCTIONAL).register(e -> e.addAfter(PromenadeItems.SAKURA_HANGING_SIGN, PromenadeItems.MAPLE_SIGN, PromenadeItems.MAPLE_HANGING_SIGN)); + ItemGroupEvents.modifyEntriesEvent(ItemGroups.FUNCTIONAL).register(e -> e.addAfter(PromenadeBlocks.SAKURA_SHELF, PromenadeBlocks.MAPLE_SHELF)); ItemGroupEvents.modifyEntriesEvent(ItemGroups.TOOLS).register(e -> e.addAfter(PromenadeItems.SAKURA_CHEST_BOAT, PromenadeItems.MAPLE_BOAT, PromenadeItems.MAPLE_CHEST_BOAT)); ItemGroupEvents.modifyEntriesEvent(ItemGroups.FOOD_AND_DRINK).register(e -> e.addAfter(Items.HONEY_BOTTLE, PromenadeItems.MAPLE_SYRUP_BOTTLE)); ItemGroupEvents.modifyEntriesEvent(ItemGroups.FUNCTIONAL).register(e -> e.addAfter(Blocks.ACACIA_HANGING_SIGN, PromenadeItems.PALM_SIGN, PromenadeItems.PALM_HANGING_SIGN)); + ItemGroupEvents.modifyEntriesEvent(ItemGroups.FUNCTIONAL).register(e -> e.addAfter(Blocks.ACACIA_SHELF, PromenadeBlocks.PALM_SHELF)); ItemGroupEvents.modifyEntriesEvent(ItemGroups.TOOLS).register(e -> e.addAfter(Items.ACACIA_CHEST_BOAT, PromenadeItems.PALM_BOAT, PromenadeItems.PALM_CHEST_BOAT)); ItemGroupEvents.modifyEntriesEvent(ItemGroups.FUNCTIONAL).register(e -> e.addAfter(Blocks.WARPED_HANGING_SIGN, PromenadeItems.DARK_AMARANTH_SIGN, PromenadeItems.DARK_AMARANTH_HANGING_SIGN)); + ItemGroupEvents.modifyEntriesEvent(ItemGroups.FUNCTIONAL).register(e -> e.addAfter(Blocks.WARPED_SHELF, PromenadeBlocks.DARK_AMARANTH_SHELF)); ItemGroupEvents.modifyEntriesEvent(ItemGroups.FOOD_AND_DRINK).register(e -> { e.addAfter(Items.SWEET_BERRIES, PromenadeItems.BLUEBERRIES); @@ -205,33 +205,9 @@ public static void appendItemGroups() { ItemGroupEvents.modifyEntriesEvent(ItemGroups.INGREDIENTS).register(e -> e.addAfter(Items.FLOWER_BANNER_PATTERN, PromenadeItems.BOVINE_BANNER_PATTERN)); - appendSpawnEgg(PromenadeItems.CAPYBARA_SPAWN_EGG); - appendSpawnEgg(PromenadeItems.DUCK_SPAWN_EGG); - appendSpawnEgg(PromenadeItems.LUSH_CREEPER_SPAWN_EGG); - appendSpawnEgg(PromenadeItems.SUNKEN_SPAWN_EGG); - } - - public static void appendSpawnEgg(Item spawnEgg) { - var itemGroup = Registries.ITEM_GROUP.get(ItemGroups.SPAWN_EGGS); - String path = Registries.ITEM.getId(spawnEgg).getPath(); - - if (itemGroup == null) { - return; - } - - Predicate predicate = stack1 -> { - String path1 = Registries.ITEM.getId(stack1.getItem()).getPath(); - for (ItemStack stack2 : itemGroup.getDisplayStacks()) { - String path2 = Registries.ITEM.getId(stack2.getItem()).getPath(); - if (path1.matches(".*_spawn_egg") && path2.matches(".*_spawn_egg")) { - // check if path is lexicographically between path1 and path2 - if (path.compareTo(path1) > 0 && path.compareTo(path2) < 0) { - return true; - } - } - } - return false; - }; - ItemGroupEvents.modifyEntriesEvent(ItemGroups.SPAWN_EGGS).register(e -> e.addAfter(predicate, Collections.singleton(new ItemStack(spawnEgg)), ItemGroup.StackVisibility.PARENT_AND_SEARCH_TABS)); + ItemGroupEvents.modifyEntriesEvent(ItemGroups.SPAWN_EGGS).register(e -> e.addAfter(Items.CHICKEN_SPAWN_EGG, PromenadeItems.DUCK_SPAWN_EGG)); + ItemGroupEvents.modifyEntriesEvent(ItemGroups.SPAWN_EGGS).register(e -> e.addAfter(Items.PIG_SPAWN_EGG, PromenadeItems.CAPYBARA_SPAWN_EGG)); + ItemGroupEvents.modifyEntriesEvent(ItemGroups.SPAWN_EGGS).register(e -> e.addAfter(Items.CREEPER_SPAWN_EGG, PromenadeItems.LUSH_CREEPER_SPAWN_EGG)); + ItemGroupEvents.modifyEntriesEvent(ItemGroups.SPAWN_EGGS).register(e -> e.addAfter(Items.DROWNED_SPAWN_EGG, PromenadeItems.SUNKEN_SPAWN_EGG)); } } diff --git a/src/main/java/fr/hugman/promenade/mixin/SnowBlockMixin.java b/src/main/java/fr/hugman/promenade/mixin/SnowBlockMixin.java index 3b332c3d..db0f9d0d 100644 --- a/src/main/java/fr/hugman/promenade/mixin/SnowBlockMixin.java +++ b/src/main/java/fr/hugman/promenade/mixin/SnowBlockMixin.java @@ -28,7 +28,7 @@ public class SnowBlockMixin { @Inject(method = "randomTick", at = @At("HEAD"), cancellable = true) private void promenade$randomTick(BlockState state, ServerWorld world, BlockPos pos, Random random, CallbackInfo ci) { - if (!world.getGameRules().getBoolean(PromenadeGameRules.DO_BLOCKS_GET_SNOWY)) { + if (! world.getGameRules().getValue(PromenadeGameRules.DO_BLOCKS_GET_SNOWY)) { return; } if(state.get(LAYERS) == 8 && world.getBlockState(pos.up()).isOf((SnowBlock)(Object)this)) { diff --git a/src/main/java/fr/hugman/promenade/registry/PromenadeFlammables.java b/src/main/java/fr/hugman/promenade/registry/PromenadeFlammables.java index 5f81828c..e47a911d 100644 --- a/src/main/java/fr/hugman/promenade/registry/PromenadeFlammables.java +++ b/src/main/java/fr/hugman/promenade/registry/PromenadeFlammables.java @@ -54,6 +54,7 @@ public static void register() { fire.add(PromenadeBlocks.SAKURA_SLAB, 5, 20); fire.add(PromenadeBlocks.SAKURA_FENCE, 5, 20); fire.add(PromenadeBlocks.SAKURA_FENCE_GATE, 5, 20); + fire.add(PromenadeBlocks.SAKURA_SHELF, 30, 20); fire.add(PromenadeBlocks.BLUSH_SAKURA_BLOSSOMS, 30, 60); fire.add(PromenadeBlocks.SNOWY_BLUSH_SAKURA_BLOSSOMS, 30, 60); fire.add(PromenadeBlocks.BLUSH_SAKURA_BLOSSOM_PILE, 30, 60); @@ -70,6 +71,7 @@ public static void register() { fire.add(PromenadeBlocks.MAPLE_SLAB, 5, 20); fire.add(PromenadeBlocks.MAPLE_FENCE, 5, 20); fire.add(PromenadeBlocks.MAPLE_FENCE_GATE, 5, 20); + fire.add(PromenadeBlocks.MAPLE_SHELF, 30, 20); fire.add(PromenadeBlocks.SAP_MAPLE_LEAVES, 30, 60); fire.add(PromenadeBlocks.SNOWY_SAP_MAPLE_LEAVES, 30, 60); fire.add(PromenadeBlocks.FALLEN_SAP_MAPLE_LEAVES, 30, 60); @@ -96,6 +98,7 @@ public static void register() { fire.add(PromenadeBlocks.PALM_SLAB, 5, 20); fire.add(PromenadeBlocks.PALM_FENCE, 5, 20); fire.add(PromenadeBlocks.PALM_FENCE_GATE, 5, 20); + fire.add(PromenadeBlocks.PALM_SHELF, 30, 20); fire.add(PromenadeBlocks.PALM_LEAVES, 30, 60); fire.add(PromenadeBlocks.SNOWY_PALM_LEAVES, 30, 60); fire.add(PromenadeBlocks.PALM_HANGING_LEAVES, 30, 60); diff --git a/src/main/java/fr/hugman/promenade/trade/TradeFactory.java b/src/main/java/fr/hugman/promenade/trade/TradeFactory.java index 2300e63b..15563368 100644 --- a/src/main/java/fr/hugman/promenade/trade/TradeFactory.java +++ b/src/main/java/fr/hugman/promenade/trade/TradeFactory.java @@ -9,6 +9,6 @@ public class TradeFactory { public static TradeOffers.Factory sapling(ItemConvertible sapling) { - return (entity, random) -> new TradeOffer(new TradedItem(Items.EMERALD, 5), new ItemStack(sapling), 8, 1, 0.05f); + return (world, entity, random) -> new TradeOffer(new TradedItem(Items.EMERALD, 5), new ItemStack(sapling), 8, 1, 0.05f); } } diff --git a/src/main/java/fr/hugman/promenade/world/PromenadeGameRules.java b/src/main/java/fr/hugman/promenade/world/PromenadeGameRules.java index 6a204f81..815a0483 100644 --- a/src/main/java/fr/hugman/promenade/world/PromenadeGameRules.java +++ b/src/main/java/fr/hugman/promenade/world/PromenadeGameRules.java @@ -1,13 +1,10 @@ package fr.hugman.promenade.world; -import net.fabricmc.fabric.api.gamerule.v1.GameRuleFactory; -import net.fabricmc.fabric.api.gamerule.v1.GameRuleRegistry; -import net.minecraft.world.GameRules; +import fr.hugman.promenade.Promenade; +import net.fabricmc.fabric.api.gamerule.v1.GameRuleBuilder; +import net.minecraft.world.rule.GameRule; +import net.minecraft.world.rule.GameRuleCategory; public class PromenadeGameRules { - public static final GameRules.Key DO_BLOCKS_GET_SNOWY = of("doBlocksGetSnowy", GameRules.Category.UPDATES, GameRuleFactory.createBooleanRule(true)); - - public static > GameRules.Key of(String name, GameRules.Category category, GameRules.Type type) { - return GameRuleRegistry.register(name, category, type); - } + public static final GameRule DO_BLOCKS_GET_SNOWY = GameRuleBuilder.forBoolean(true).category(GameRuleCategory.UPDATES).buildAndRegister(Promenade.id("do_blocks_get_snowy")); }