From c662f7b2d3de728a7a2dba8cb07b5ef2de8b286a Mon Sep 17 00:00:00 2001 From: Hugman Date: Sat, 13 Dec 2025 12:18:36 +0100 Subject: [PATCH 1/7] Add mob variants documentation --- docs/_meta.json | 1 + docs/customize/_meta.json | 3 +++ docs/customize/mob_variants.mdx | 36 +++++++++++++++++++++++++++++++++ 3 files changed, 40 insertions(+) create mode 100644 docs/customize/_meta.json create mode 100644 docs/customize/mob_variants.mdx 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 From a08f31811c0280f3f6a0da13465c8a8e7af7b9ab Mon Sep 17 00:00:00 2001 From: Hugo Landrin Date: Tue, 23 Dec 2025 23:26:00 +0100 Subject: [PATCH 2/7] Update to 1.21.11 --- build.gradle | 2 +- gradle.properties | 12 +- gradle/wrapper/gradle-wrapper.properties | 2 +- .../block/PromenadeBlockRenderLayers.java | 2 +- .../data/provider/PromenadeBiomeProvider.java | 156 ++++++------------ .../provider/PromenadeBiomeTagProvider.java | 1 - .../data/provider/PromenadeModelProvider.java | 4 +- .../promenade/block/BerryBushBlock.java | 4 +- .../promenade/block/WitherRosePileBlock.java | 4 +- .../promenade/entity/CapybaraEntity.java | 4 +- .../hugman/promenade/entity/DuckEntity.java | 4 +- .../promenade/entity/LushCreeperEntity.java | 4 +- .../hugman/promenade/entity/SunkenEntity.java | 20 ++- .../promenade/mixin/SnowBlockMixin.java | 2 +- .../hugman/promenade/trade/TradeFactory.java | 2 +- .../promenade/world/PromenadeGameRules.java | 13 +- 16 files changed, 94 insertions(+), 142 deletions(-) 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/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/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/PromenadeModelProvider.java b/src/datagen/java/fr/hugman/promenade/data/provider/PromenadeModelProvider.java index ef81cfc6..eab2a652 100644 --- a/src/datagen/java/fr/hugman/promenade/data/provider/PromenadeModelProvider.java +++ b/src/datagen/java/fr/hugman/promenade/data/provider/PromenadeModelProvider.java @@ -221,7 +221,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 +304,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/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/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/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/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/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/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")); } From 149b8e9e270b07e22892dbcadf04e39450ad754f Mon Sep 17 00:00:00 2001 From: Hugman Date: Fri, 9 Jan 2026 21:58:34 +0100 Subject: [PATCH 3/7] Add shelves --- .../textures/block/dark_amaranth_shelf.png | Bin 0 -> 537 bytes .../promenade/textures/block/maple_shelf.png | Bin 0 -> 549 bytes .../promenade/textures/block/palm_shelf.png | Bin 0 -> 495 bytes .../promenade/textures/block/sakura_shelf.png | Bin 0 -> 472 bytes .../provider/PromenadeBlockLootTableProvider.java | 4 ++++ .../data/provider/PromenadeBlockTagProvider.java | 1 + .../data/provider/PromenadeItemTagProvider.java | 1 + .../data/provider/PromenadeModelProvider.java | 4 ++++ .../data/provider/PromenadeRecipeGenerator.java | 4 ++++ .../hugman/promenade/block/PromenadeBlocks.java | 9 +++++---- .../block/entity/PromenadeBlockEntities.java | 5 +++++ .../promenade/block/helper/BlockFactory.java | 6 ++++++ .../itemgroup/PromenadeItemGroupAdditions.java | 4 ++++ .../promenade/registry/PromenadeFlammables.java | 3 +++ 14 files changed, 37 insertions(+), 4 deletions(-) create mode 100644 src/client/resources/assets/promenade/textures/block/dark_amaranth_shelf.png create mode 100644 src/client/resources/assets/promenade/textures/block/maple_shelf.png create mode 100644 src/client/resources/assets/promenade/textures/block/palm_shelf.png create mode 100644 src/client/resources/assets/promenade/textures/block/sakura_shelf.png 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 0000000000000000000000000000000000000000..859f7867fee87c82e264fbb225675893af378c30 GIT binary patch literal 537 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|Yyx~jTtRX+ zVg4TR;Q{HK7>q@(X78j|p}?OkN4JGuzX}F~p)bcVhRXHwqjs7Y(dqSeGmQ|G$2_ zLI2!{?9dL~wTC9&a>$oks~A6Z9V;}DO8+Z%^BHx4g%Y;oVUXhVnNa>Yw656dL% zwmUAg>wA3IFvhdE^4X=M%bv+KRx&0@EbQ{QVsfRjNjdvYzmYHJ)R~K)*;-!K5pu}m zKQLvAeX>iNKig#$1A%uB3(SMI-`KoH^JeD(kFA$xewDgs+C$0We`}X3hORp`ap#dMPfI1%oe^CxKfSl^)YIqH z`|nu!uW*0nbLX7%_1=45wer?|syw{%wcCG{r2n$r6MC=R+rQI?@BBX3c`>JEr`?U0 z0n*)h7U`AZ;yW$=6j`6DFVfVn`lkEoNzmsO^>+2?yDpaBzxm62`jZdx-?-I&J@IHf Q2#gj6Pgg&ebxsLQ04w|e8UO$Q literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..ce88e92587ff7dcfb4870ac071fd8fd9c637b562 GIT binary patch literal 549 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|oC178T!D09 zxMx+Ie_di=LsD>adPG}hR9{|Pe?h|JlH@5R$+N377S(4jZpvBSlDDe0V0C-p=I-L1 z6U+BbsoFoS`tYoVj^M|ZKvTp@g8YIR{$m3njlGM3cISJ#IEGmC=1y#!w8VhJrE})o z(+(oihyMS6C2F-RYi;V*mrGnLCYAISn76pT(DL_J`t`HMPHg3>zb`#QRDEoY_=LUn z_m5?iKg`t4y2al1Yf#o!ktH72ugauFY-b-X9!+}50#B>GiUF5-b?z@%GI&SxFEx(*#~U%O#Lz|y#x zl3Pu`#dwC#(9N4z>*9CNkS)kY)w1R6G{(cn6razU&M`k%WktLCOOIC%R|Zu6TBESd z!(l>s{jW6-o^>bA73})=sVWO+vIxqe%4D*_1>$u->j*8+xYm& zg~u09x!6BFvHf$cU2WKk-zUF6@Oih-@5?&(;@f$@>mI&-?ef2(=f_^THub7=bx$`H z?l^z8=6TS)EnjON7CaA%D>?LYTY165=EM5i_x`n>{%O(gJ7>!EOttS=-r0Gjb6xTC e7vXv*AKELN)|0=yI5HX-ISihzelF{r5}E*u7z*?N literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..cfca9c59823fc151a1492cafc03fe40a27c0b447 GIT binary patch literal 495 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|j01c^T!D0< zgJ7Mf*rYJoN#Sx+!eyt%Db0vhoR_MxAW>~ew%)1&qxB`Gn~F>~R$6SXvEJF_(7Aly zMxZvqk|4iehW}_lK-6I&&>mk;7sn8b-qJ}IHyu{saBhmu2hJ; zxk4sLK}hcIVVy;q3QGR5Tl5rn>qX7{cu1Q$ru4e&*8T5aNUi!??H;b_6tennP(*jy z#XD!CnY)AzI3`FKKFFG7Ub5Xpqe~#2H$mNi-+6mM@%Lp~teGE7wwTO#`S9-L3wLtf zOt_z##d08IZTa_i_ih=aM86R=UV3o%a`in+8ATmZKHCM!Jv8Ly4O%e2U(zUY*#%`A z|IBC8*er|wCSN<`bNA5(j@QA<6O;G9R?@D1v+KmiIjkFA&tbh<-_-F;XU0M0=f8t5 z&p8@#G;-&W3nuA>q3ddFE8Z0R{P|CA`#I|?n~k`)f4*XxUKpFV=95k0D=pRkpW`3D z_jTaPm6;dA*1k1A;i;3x<9qyk+S8vLkZwQ8D&8)?ee=E|Pv$V7&@AgUGGTfr9j{%R dA2aE&yoIHNeV>9<2QbtbJYD@<);T3K0RV~&+Is*1 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..92d35d700c888b14e756e8a6bf69bcea940c3b34 GIT binary patch literal 472 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|R04cLT!FNq zw4k|yh@G;yld6QfuB@+-qMwmsn1yn*je5MjX0o$R-H$CQKy^GNL4Lsu{}F)mNPrs9 zOfOFt#}JF&+)0s>m=$@PdByG({r~O9Icv$nHhw`#%K6+#;=OoU1h0ni>mc?|zA|o_$u8BT&?8>i+xtj#hPFy%Tja?U$HP?)!x{yOxXIsQmlx z_;qvf_t{S)f2d7=uXnM$`15KzQMvoxOq2h}O+PrHtgxbZrp&o&X7%Y}M!)L{Ep{3# zP;WoWI{R?{?X3S#4#^c1S?nw^s|1o?g#P`#A6{Rq*lw@ECwk?B%LFrEXft@a`njxg HN@xNAcBjL; literal 0 HcmV?d00001 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..507b0695 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, 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 eab2a652..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); 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/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/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/itemgroup/PromenadeItemGroupAdditions.java b/src/main/java/fr/hugman/promenade/itemgroup/PromenadeItemGroupAdditions.java index a4a45bbf..405e87df 100644 --- a/src/main/java/fr/hugman/promenade/itemgroup/PromenadeItemGroupAdditions.java +++ b/src/main/java/fr/hugman/promenade/itemgroup/PromenadeItemGroupAdditions.java @@ -184,16 +184,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); 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); From 4d0b5a3b9401259587f0b216704769278bc88636 Mon Sep 17 00:00:00 2001 From: Hugman Date: Fri, 9 Jan 2026 22:01:40 +0100 Subject: [PATCH 4/7] Fix sunken not burning in daylight --- .../promenade/data/provider/PromenadeEntityTypeTagProvider.java | 2 ++ 1 file changed, 2 insertions(+) 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); From b4869da7d1192b7e18b408919ea037058d6a27bf Mon Sep 17 00:00:00 2001 From: Hugman Date: Fri, 9 Jan 2026 22:01:53 +0100 Subject: [PATCH 5/7] Fix monsters appearing in peaceful --- .../fr/hugman/promenade/entity/PromenadeEntityTypes.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) 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)); From 74d02efd82e97bf65a445a156a193b6e2147f10b Mon Sep 17 00:00:00 2001 From: Hugman Date: Sat, 10 Jan 2026 18:11:55 +0100 Subject: [PATCH 6/7] Re-organize Promenade spawn eggs in creative --- .../PromenadeItemGroupAdditions.java | 36 +++---------------- 1 file changed, 4 insertions(+), 32 deletions(-) diff --git a/src/main/java/fr/hugman/promenade/itemgroup/PromenadeItemGroupAdditions.java b/src/main/java/fr/hugman/promenade/itemgroup/PromenadeItemGroupAdditions.java index 405e87df..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() { @@ -209,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)); } } From 9e8c294f4b5abe543f6a8a0498476ec7622c5104 Mon Sep 17 00:00:00 2001 From: Hugman Date: Sat, 10 Jan 2026 18:12:26 +0100 Subject: [PATCH 7/7] Ignore coiled vines from gliding in elytra --- .../promenade/data/provider/PromenadeBlockTagProvider.java | 1 + 1 file changed, 1 insertion(+) 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 507b0695..50fcceb9 100644 --- a/src/datagen/java/fr/hugman/promenade/data/provider/PromenadeBlockTagProvider.java +++ b/src/datagen/java/fr/hugman/promenade/data/provider/PromenadeBlockTagProvider.java @@ -173,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)