From f37e7155549436f68dc4696aa38ea7f3e09a7715 Mon Sep 17 00:00:00 2001 From: TelepathicGrunt <40846040+telepathicgrunt@users.noreply.github.com> Date: Tue, 25 May 2021 13:02:16 -0400 Subject: [PATCH] Fixed Biome Modification API not working for datapack provided biomes (#1463) * Fixed Biome Modification API not working for json biome * upgraded test to add to all deserts and added json biome. (note the test mod won't load the json biome tho. Make it into a datapack so it works) * switched set of rgeistrykeys to set of biome instances * added datapack as backup to test mod * removed unused imports * removed the biome json file from the test mod's data folder --- .../modification/BiomeModificationImpl.java | 4 +-- .../BiomeModificationTracker.java | 3 +- .../DynamicRegistryManagerImplMixin.java | 5 ++- .../fabric/test/biome/FabricBiomeTest.java | 14 ++++++++ .../test/biome/mixin/DecoratorsAccessor.java | 30 ++++++++++++++++++ .../src/testmod/resources/desert_test.zip | Bin 0 -> 1055 bytes .../fabric-biome-testmod-api-v1.mixins.json | 11 +++++++ .../src/testmod/resources/fabric.mod.json | 5 ++- 8 files changed, 64 insertions(+), 8 deletions(-) create mode 100644 fabric-biome-api-v1/src/testmod/java/net/fabricmc/fabric/test/biome/mixin/DecoratorsAccessor.java create mode 100644 fabric-biome-api-v1/src/testmod/resources/desert_test.zip create mode 100644 fabric-biome-api-v1/src/testmod/resources/fabric-biome-testmod-api-v1.mixins.json diff --git a/fabric-biome-api-v1/src/main/java/net/fabricmc/fabric/impl/biome/modification/BiomeModificationImpl.java b/fabric-biome-api-v1/src/main/java/net/fabricmc/fabric/impl/biome/modification/BiomeModificationImpl.java index e1eb4fce2..63bccaa8d 100644 --- a/fabric-biome-api-v1/src/main/java/net/fabricmc/fabric/impl/biome/modification/BiomeModificationImpl.java +++ b/fabric-biome-api-v1/src/main/java/net/fabricmc/fabric/impl/biome/modification/BiomeModificationImpl.java @@ -111,7 +111,7 @@ public class BiomeModificationImpl { // which usually will not result in a reload of objects, since it reuses existing objects // from the manager when they are being referenced. BiomeModificationTracker modificationTracker = (BiomeModificationTracker) (Object) impl; - Set<RegistryKey<Biome>> modifiedBiomes = modificationTracker.fabric_getModifiedBiomes(); + Set<Biome> modifiedBiomes = modificationTracker.fabric_getModifiedBiomes(); Registry<Biome> biomes = impl.get(Registry.BIOME_KEY); @@ -131,7 +131,7 @@ public class BiomeModificationImpl { for (RegistryKey<Biome> key : keys) { Biome biome = biomes.getOrThrow(key); - if (!modifiedBiomes.add(key)) { + if (!modifiedBiomes.add(biome)) { continue; // Do not modify the same biome twice } diff --git a/fabric-biome-api-v1/src/main/java/net/fabricmc/fabric/impl/biome/modification/BiomeModificationTracker.java b/fabric-biome-api-v1/src/main/java/net/fabricmc/fabric/impl/biome/modification/BiomeModificationTracker.java index 331fe21ee..02e138dbd 100644 --- a/fabric-biome-api-v1/src/main/java/net/fabricmc/fabric/impl/biome/modification/BiomeModificationTracker.java +++ b/fabric-biome-api-v1/src/main/java/net/fabricmc/fabric/impl/biome/modification/BiomeModificationTracker.java @@ -20,7 +20,6 @@ import java.util.Set; import org.jetbrains.annotations.ApiStatus; -import net.minecraft.util.registry.RegistryKey; import net.minecraft.world.biome.Biome; /** @@ -29,5 +28,5 @@ import net.minecraft.world.biome.Biome; */ @ApiStatus.Internal public interface BiomeModificationTracker { - Set<RegistryKey<Biome>> fabric_getModifiedBiomes(); + Set<Biome> fabric_getModifiedBiomes(); } diff --git a/fabric-biome-api-v1/src/main/java/net/fabricmc/fabric/mixin/biome/modification/DynamicRegistryManagerImplMixin.java b/fabric-biome-api-v1/src/main/java/net/fabricmc/fabric/mixin/biome/modification/DynamicRegistryManagerImplMixin.java index a7e6668de..dca4cda73 100644 --- a/fabric-biome-api-v1/src/main/java/net/fabricmc/fabric/mixin/biome/modification/DynamicRegistryManagerImplMixin.java +++ b/fabric-biome-api-v1/src/main/java/net/fabricmc/fabric/mixin/biome/modification/DynamicRegistryManagerImplMixin.java @@ -23,7 +23,6 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; import net.minecraft.util.registry.DynamicRegistryManager; -import net.minecraft.util.registry.RegistryKey; import net.minecraft.world.biome.Biome; import net.fabricmc.fabric.impl.biome.modification.BiomeModificationTracker; @@ -35,10 +34,10 @@ import net.fabricmc.fabric.impl.biome.modification.BiomeModificationTracker; @Mixin(DynamicRegistryManager.Impl.class) public class DynamicRegistryManagerImplMixin implements BiomeModificationTracker { @Unique - private final Set<RegistryKey<Biome>> modifiedBiomes = new HashSet<>(); + private final Set<Biome> modifiedBiomes = new HashSet<>(); @Override - public Set<RegistryKey<Biome>> fabric_getModifiedBiomes() { + public Set<Biome> fabric_getModifiedBiomes() { return this.modifiedBiomes; } } diff --git a/fabric-biome-api-v1/src/testmod/java/net/fabricmc/fabric/test/biome/FabricBiomeTest.java b/fabric-biome-api-v1/src/testmod/java/net/fabricmc/fabric/test/biome/FabricBiomeTest.java index 9be893ea1..df9d9dedf 100644 --- a/fabric-biome-api-v1/src/testmod/java/net/fabricmc/fabric/test/biome/FabricBiomeTest.java +++ b/fabric-biome-api-v1/src/testmod/java/net/fabricmc/fabric/test/biome/FabricBiomeTest.java @@ -30,9 +30,12 @@ import net.minecraft.world.biome.DefaultBiomeCreator; import net.minecraft.world.biome.GenerationSettings; import net.minecraft.world.biome.SpawnSettings; import net.minecraft.world.gen.GenerationStep; +import net.minecraft.world.gen.feature.ConfiguredFeature; import net.minecraft.world.gen.feature.ConfiguredFeatures; import net.minecraft.world.gen.feature.ConfiguredStructureFeatures; import net.minecraft.world.gen.feature.DefaultBiomeFeatures; +import net.minecraft.world.gen.feature.Feature; +import net.minecraft.world.gen.feature.FeatureConfig; import net.minecraft.world.gen.surfacebuilder.ConfiguredSurfaceBuilders; import net.minecraft.world.gen.surfacebuilder.ConfiguredSurfaceBuilder; import net.minecraft.world.gen.surfacebuilder.SurfaceBuilder; @@ -47,6 +50,7 @@ import net.fabricmc.fabric.api.biome.v1.NetherBiomes; import net.fabricmc.fabric.api.biome.v1.OverworldBiomes; import net.fabricmc.fabric.api.biome.v1.OverworldClimate; import net.fabricmc.fabric.api.biome.v1.TheEndBiomes; +import net.fabricmc.fabric.test.biome.mixin.DecoratorsAccessor; /** * <b>NOTES FOR TESTING:</b> @@ -97,6 +101,9 @@ public class FabricBiomeTest implements ModInitializer { OverworldBiomes.addContinentalBiome(BiomeKeys.END_HIGHLANDS, OverworldClimate.DRY, 0.5); + ConfiguredFeature<?, ?> COMMON_DESERT_WELL = Feature.DESERT_WELL.configure(FeatureConfig.DEFAULT).decorate(DecoratorsAccessor.getSQUARE_HEIGHTMAP()); + Registry.register(BuiltinRegistries.CONFIGURED_FEATURE, new Identifier(MOD_ID, "common_desert_well"), COMMON_DESERT_WELL); + BiomeModifications.create(new Identifier("fabric:test_mod")) .add(ModificationPhase.ADDITIONS, BiomeSelectors.foundInOverworld(), @@ -107,6 +114,13 @@ public class FabricBiomeTest implements ModInitializer { ), context -> { context.getGenerationSettings().setBuiltInSurfaceBuilder(ConfiguredSurfaceBuilders.CRIMSON_FOREST); + }) + .add(ModificationPhase.ADDITIONS, + BiomeSelectors.categories(Biome.Category.DESERT), + context -> { + context.getGenerationSettings().addFeature(GenerationStep.Feature.TOP_LAYER_MODIFICATION, + BuiltinRegistries.CONFIGURED_FEATURE.getKey(COMMON_DESERT_WELL).get() + ); }); } diff --git a/fabric-biome-api-v1/src/testmod/java/net/fabricmc/fabric/test/biome/mixin/DecoratorsAccessor.java b/fabric-biome-api-v1/src/testmod/java/net/fabricmc/fabric/test/biome/mixin/DecoratorsAccessor.java new file mode 100644 index 000000000..7df10d7d8 --- /dev/null +++ b/fabric-biome-api-v1/src/testmod/java/net/fabricmc/fabric/test/biome/mixin/DecoratorsAccessor.java @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2016, 2017, 2018, 2019 FabricMC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.fabricmc.fabric.test.biome.mixin; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +import net.minecraft.world.gen.decorator.ConfiguredDecorator; + +@Mixin(targets = "net.minecraft.world.gen.feature.ConfiguredFeatures$Decorators") +public interface DecoratorsAccessor { + @Accessor + static ConfiguredDecorator<?> getSQUARE_HEIGHTMAP() { + throw new UnsupportedOperationException(""); + } +} diff --git a/fabric-biome-api-v1/src/testmod/resources/desert_test.zip b/fabric-biome-api-v1/src/testmod/resources/desert_test.zip new file mode 100644 index 0000000000000000000000000000000000000000..712003a324b72ab557a6f50a6e286e4335b98c29 GIT binary patch literal 1055 zcmWIWW@Zs#0D%u(+k(IhD8Ub;QxZ!O^>Z`xQj?1k(@OLMa4MF-R9v24l#`O4nukZ1 z93EXsnfbY?aJ?K1-+<0r?e%$A5+ehH12Y4ICPBR^sl};9C3;!K`FV4LV*8s61Ztj# z&#=2M8Q^dGpUW^sH+ucXEh*7odOq&I@5HG1@#Q>^^tASy{qCD0I6}BmKRnt{@nLe~ zshyiXtlRjs!_bOh(Iqj}MlSXhep0y+UON{3kZ5r{?H#zN(R%gv%vpVBPFgIpVLCaV zsh;`zrWE^6ewzKdTcVc9e(Ra?VS2UV+`=O<+v47TTYYug@+sE)SG;*$ZEs}G;i0_! z?wd=oyXF^OzBSMP*L<$~6PP-WuDrO+WtMr|B6qIX(@spW6V)Cw-(B_jamG>sC+8bp zpZq4tC->B3{CS%5psBS{yQ5FK<^Mmmz3m?uS40=x+n>GTX5_n5k@6GVJa0=MeG$AS z{+Gxr^}lX1GtE_}ek-zDswc4i@bTcDgtOsC*d_)a(Oa5%-mCGWglJ39bt{Jp=e9*} zI(IBtgmJZ0=7}TbR~Ihb9jRx|v(#3_^6AaMY@KDRbvN?a&(*tqq({i-_1BXg(`+W& z!;%IE19$hfpoYk@gO<Pu@&saTATCHu&eqFK&P^>zT>b3nqYy0*pL1cGf>y9?Qk?T+ z%b!JejtDK7F_SOCKy|CdPL0hARE+KUH8>tE6Pv2h@RjjtcID12#sF_dCJ_eQX%%P< z5C}jh%#@2;Gbrss07$bg5Thk~q?C-?6i`}*0FWukK#a>2SjvW(g*|P9%wl9v0Fv{8 p7{6IaDIF0?*kb}{7Svb|CX{#y@MdKLNwNZAJTQ-~0!lM5007BfS)Bj? literal 0 HcmV?d00001 diff --git a/fabric-biome-api-v1/src/testmod/resources/fabric-biome-testmod-api-v1.mixins.json b/fabric-biome-api-v1/src/testmod/resources/fabric-biome-testmod-api-v1.mixins.json new file mode 100644 index 000000000..c58e62ba0 --- /dev/null +++ b/fabric-biome-api-v1/src/testmod/resources/fabric-biome-testmod-api-v1.mixins.json @@ -0,0 +1,11 @@ +{ + "required": true, + "package": "net.fabricmc.fabric.test.biome.mixin", + "compatibilityLevel": "JAVA_16", + "client": [ + "DecoratorsAccessor" + ], + "injectors": { + "defaultRequire": 1 + } +} diff --git a/fabric-biome-api-v1/src/testmod/resources/fabric.mod.json b/fabric-biome-api-v1/src/testmod/resources/fabric.mod.json index b3fbb654b..f15168368 100644 --- a/fabric-biome-api-v1/src/testmod/resources/fabric.mod.json +++ b/fabric-biome-api-v1/src/testmod/resources/fabric.mod.json @@ -12,5 +12,8 @@ "main": [ "net.fabricmc.fabric.test.biome.FabricBiomeTest" ] - } + }, + "mixins": [ + "fabric-biome-testmod-api-v1.mixins.json" + ] }