From 7e883ab5ced8bd16e940ff388f2290063c117cff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zo=C3=AB?= Date: Tue, 5 Jul 2022 01:52:24 -0700 Subject: [PATCH 01/14] Villager Types --- .../com/dfsek/terra/forge/util/BiomeUtil.java | 19 +++++++++++++++-- .../java/com/dfsek/terra/mod/ModPlatform.java | 6 +++++- .../mod/config/VanillaBiomeProperties.java | 9 ++++++++ .../mod/config/VillagerTypeTemplate.java | 21 +++++++++++++++++++ .../mixin/access/VillagerTypeAccessor.java | 17 +++++++++++++++ .../dfsek/terra/mod/util/MinecraftUtil.java | 7 ++++--- .../main/resources/terra.common.mixins.json | 1 + 7 files changed, 74 insertions(+), 6 deletions(-) create mode 100644 platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/VillagerTypeTemplate.java create mode 100644 platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/access/VillagerTypeAccessor.java diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/util/BiomeUtil.java b/platforms/forge/src/main/java/com/dfsek/terra/forge/util/BiomeUtil.java index 28fe88ec2..827143edb 100644 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/util/BiomeUtil.java +++ b/platforms/forge/src/main/java/com/dfsek/terra/forge/util/BiomeUtil.java @@ -1,14 +1,21 @@ package com.dfsek.terra.forge.util; +import com.dfsek.terra.mod.config.VanillaBiomeProperties; +import com.dfsek.terra.mod.mixin.access.VillagerTypeAccessor; + import net.minecraft.util.Identifier; import net.minecraft.util.registry.BuiltinRegistries; +import net.minecraft.util.registry.Registry; import net.minecraft.util.registry.RegistryKey; +import net.minecraft.village.VillagerType; import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.RegisterEvent.RegisterHelper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.ArrayList; +import java.util.Map; +import java.util.Objects; import com.dfsek.terra.api.config.ConfigPack; import com.dfsek.terra.api.world.biome.Biome; @@ -45,13 +52,17 @@ public final class BiomeUtil { */ private static void registerBiome(Biome biome, ConfigPack pack, com.dfsek.terra.api.registry.key.RegistryKey id, RegisterHelper helper) { - RegistryKey vanilla = ((ProtoPlatformBiome) biome.getPlatformBiome()).get(BuiltinRegistries.BIOME); + RegistryKey vanilla = ((ProtoPlatformBiome) biome.getPlatformBiome()) .get(BuiltinRegistries.BIOME); if(pack.getContext().get(PreLoadCompatibilityOptions.class).useVanillaBiomes()) { ((ProtoPlatformBiome) biome.getPlatformBiome()).setDelegate(vanilla); } else { - net.minecraft.world.biome.Biome minecraftBiome = MinecraftUtil.createBiome(biome, ForgeRegistries.BIOMES.getDelegateOrThrow(vanilla).value()); + VanillaBiomeProperties vanillaBiomeProperties = biome.getContext().get(VanillaBiomeProperties.class); + + net.minecraft.world.biome.Biome vanillaBiome = ForgeRegistries.BIOMES.getDelegateOrThrow(vanilla).value(); + + net.minecraft.world.biome.Biome minecraftBiome = MinecraftUtil.createBiome(biome, vanillaBiome, vanillaBiomeProperties); Identifier identifier = new Identifier("terra", MinecraftUtil.createBiomeID(pack, id)); @@ -62,6 +73,10 @@ public final class BiomeUtil { ((ProtoPlatformBiome) biome.getPlatformBiome()).setDelegate(ForgeRegistries.BIOMES.getHolder(identifier).orElseThrow().getKey().orElseThrow()); } + Map villagerMap = VillagerTypeAccessor.getBiomeTypeToIdMap(); + + villagerMap.put(RegistryKey.of(Registry.BIOME_KEY, identifier), Objects.requireNonNullElse(vanillaBiomeProperties.getVillagerType(), villagerMap.getOrDefault(vanilla, VillagerType.PLAINS))); + MinecraftUtil.TERRA_BIOME_MAP.computeIfAbsent(vanilla.getValue(), i -> new ArrayList<>()).add(identifier); } } diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/ModPlatform.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/ModPlatform.java index ed9f2a986..0bea26d0c 100644 --- a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/ModPlatform.java +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/ModPlatform.java @@ -6,6 +6,8 @@ import com.dfsek.tectonic.api.exception.LoadException; import com.dfsek.terra.mod.config.SpawnSettingsTemplate; +import com.dfsek.terra.mod.config.VillagerTypeTemplate; + import net.minecraft.entity.EntityType; import net.minecraft.entity.SpawnGroup; import net.minecraft.server.MinecraftServer; @@ -15,6 +17,7 @@ import net.minecraft.sound.MusicSound; import net.minecraft.sound.SoundEvent; import net.minecraft.util.Identifier; import net.minecraft.util.registry.BuiltinRegistries; +import net.minecraft.village.VillagerType; import net.minecraft.world.biome.Biome.Precipitation; import net.minecraft.world.biome.Biome.TemperatureModifier; import net.minecraft.world.biome.BiomeEffects.GrassColorModifier; @@ -78,7 +81,8 @@ public abstract class ModPlatform extends AbstractPlatform { .registerLoader(SpawnEntry.class, SpawnEntryTemplate::new) .registerLoader(SpawnGroup.class, SpawnGroupTemplate::new) .registerLoader(SpawnTypeConfig.class, SpawnTypeConfig::new) - .registerLoader(SpawnSettings.class, SpawnSettingsTemplate::new); + .registerLoader(SpawnSettings.class, SpawnSettingsTemplate::new) + .registerLoader(VillagerType.class, VillagerTypeTemplate::new); } private ProtoPlatformBiome parseBiome(String id, DepthTracker tracker) throws LoadException { diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/VanillaBiomeProperties.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/VanillaBiomeProperties.java index e44e4b977..429829267 100644 --- a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/VanillaBiomeProperties.java +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/VanillaBiomeProperties.java @@ -7,6 +7,7 @@ import net.minecraft.sound.BiomeAdditionsSound; import net.minecraft.sound.BiomeMoodSound; import net.minecraft.sound.MusicSound; import net.minecraft.sound.SoundEvent; +import net.minecraft.village.VillagerType; import net.minecraft.world.biome.Biome.Precipitation; import net.minecraft.world.biome.Biome.TemperatureModifier; import net.minecraft.world.biome.BiomeEffects.GrassColorModifier; @@ -85,6 +86,10 @@ public class VanillaBiomeProperties implements ConfigTemplate, Properties { @Default private SpawnSettings spawnSettings = null; + @Value("villager-type") + @Default + private VillagerType villagerType = null; + public Integer getGrassColor() { return grassColor; } @@ -152,4 +157,8 @@ public class VanillaBiomeProperties implements ConfigTemplate, Properties { public SpawnSettings getSpawnSettings() { return spawnSettings; } + + public VillagerType getVillagerType() { + return villagerType; + } } diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/VillagerTypeTemplate.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/VillagerTypeTemplate.java new file mode 100644 index 000000000..235102dac --- /dev/null +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/VillagerTypeTemplate.java @@ -0,0 +1,21 @@ +package com.dfsek.terra.mod.config; + +import com.dfsek.tectonic.api.config.template.annotations.Default; +import com.dfsek.tectonic.api.config.template.annotations.Value; +import com.dfsek.tectonic.api.config.template.object.ObjectTemplate; +import net.minecraft.entity.EntityType; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; +import net.minecraft.village.VillagerType; + + +public class VillagerTypeTemplate implements ObjectTemplate { + @Value("id") + @Default + private Identifier id = null; + + @Override + public VillagerType get() { + return Registry.VILLAGER_TYPE.get(id); + } +} diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/access/VillagerTypeAccessor.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/access/VillagerTypeAccessor.java new file mode 100644 index 000000000..acf269a11 --- /dev/null +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/access/VillagerTypeAccessor.java @@ -0,0 +1,17 @@ +package com.dfsek.terra.mod.mixin.access; + +import net.minecraft.util.registry.RegistryKey; +import net.minecraft.village.VillagerType; +import net.minecraft.world.biome.Biome; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +import java.util.Map; + +@Mixin(VillagerType.class) +public interface VillagerTypeAccessor { + @Accessor("BIOME_TO_TYPE") + static Map, VillagerType> getBiomeTypeToIdMap() { + throw new AssertionError("Untransformed Accessor!"); + } +} diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/util/MinecraftUtil.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/util/MinecraftUtil.java index 1fa62bcae..152e743da 100644 --- a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/util/MinecraftUtil.java +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/util/MinecraftUtil.java @@ -1,5 +1,7 @@ package com.dfsek.terra.mod.util; +import com.dfsek.terra.mod.mixin.access.VillagerTypeAccessor; + import net.minecraft.block.entity.LootableContainerBlockEntity; import net.minecraft.block.entity.MobSpawnerBlockEntity; import net.minecraft.block.entity.SignBlockEntity; @@ -8,6 +10,7 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.registry.Registry; import net.minecraft.util.registry.RegistryEntry; import net.minecraft.util.registry.RegistryKey; +import net.minecraft.village.VillagerType; import net.minecraft.world.WorldAccess; import net.minecraft.world.biome.Biome; import net.minecraft.world.biome.Biome.Builder; @@ -89,15 +92,13 @@ public final class MinecraftUtil { return RegistryKey.of(Registry.BIOME_KEY, identifier); } - public static Biome createBiome(com.dfsek.terra.api.world.biome.Biome biome, Biome vanilla) { + public static Biome createBiome(com.dfsek.terra.api.world.biome.Biome biome, Biome vanilla, VanillaBiomeProperties vanillaBiomeProperties) { GenerationSettings.Builder generationSettings = new GenerationSettings.Builder(); BiomeEffects.Builder effects = new BiomeEffects.Builder(); net.minecraft.world.biome.Biome.Builder builder = new Builder(); - VanillaBiomeProperties vanillaBiomeProperties = biome.getContext().get(VanillaBiomeProperties.class); - effects.waterColor(Objects.requireNonNullElse(vanillaBiomeProperties.getWaterColor(), vanilla.getWaterColor())) .waterFogColor(Objects.requireNonNullElse(vanillaBiomeProperties.getWaterFogColor(), vanilla.getWaterFogColor())) .fogColor(Objects.requireNonNullElse(vanillaBiomeProperties.getFogColor(), vanilla.getFogColor())) diff --git a/platforms/mixin-common/src/main/resources/terra.common.mixins.json b/platforms/mixin-common/src/main/resources/terra.common.mixins.json index b2b28d2e0..a6b6987a3 100644 --- a/platforms/mixin-common/src/main/resources/terra.common.mixins.json +++ b/platforms/mixin-common/src/main/resources/terra.common.mixins.json @@ -8,6 +8,7 @@ "access.MobSpawnerLogicAccessor", "access.StateAccessor", "access.StructureAccessorAccessor", + "access.VillagerTypeAccessor", "fix.BeeMoveGoalsUnsynchronizedRandomAccessFix", "fix.NetherFossilOptimization", "implementations.compat.GenerationSettingsFloraFeaturesMixin", From d280e113e66c54003d5c6f2108e858f285087523 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zo=C3=AB?= Date: Tue, 5 Jul 2022 01:58:32 -0700 Subject: [PATCH 02/14] Villagers on lifecycle --- .../com/dfsek/terra/forge/util/BiomeUtil.java | 4 +--- .../dfsek/terra/lifecycle/util/BiomeUtil.java | 17 +++++++++++++++-- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/util/BiomeUtil.java b/platforms/forge/src/main/java/com/dfsek/terra/forge/util/BiomeUtil.java index 827143edb..1678fd4a8 100644 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/util/BiomeUtil.java +++ b/platforms/forge/src/main/java/com/dfsek/terra/forge/util/BiomeUtil.java @@ -59,10 +59,8 @@ public final class BiomeUtil { ((ProtoPlatformBiome) biome.getPlatformBiome()).setDelegate(vanilla); } else { VanillaBiomeProperties vanillaBiomeProperties = biome.getContext().get(VanillaBiomeProperties.class); - - net.minecraft.world.biome.Biome vanillaBiome = ForgeRegistries.BIOMES.getDelegateOrThrow(vanilla).value(); - net.minecraft.world.biome.Biome minecraftBiome = MinecraftUtil.createBiome(biome, vanillaBiome, vanillaBiomeProperties); + net.minecraft.world.biome.Biome minecraftBiome = MinecraftUtil.createBiome(biome, ForgeRegistries.BIOMES.getDelegateOrThrow(vanilla).value(), vanillaBiomeProperties); Identifier identifier = new Identifier("terra", MinecraftUtil.createBiomeID(pack, id)); diff --git a/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/util/BiomeUtil.java b/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/util/BiomeUtil.java index b632220f9..8e6732a58 100644 --- a/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/util/BiomeUtil.java +++ b/platforms/mixin-lifecycle/src/main/java/com/dfsek/terra/lifecycle/util/BiomeUtil.java @@ -1,13 +1,20 @@ package com.dfsek.terra.lifecycle.util; +import com.dfsek.terra.mod.config.VanillaBiomeProperties; + +import com.dfsek.terra.mod.mixin.access.VillagerTypeAccessor; + import net.minecraft.util.Identifier; import net.minecraft.util.registry.BuiltinRegistries; import net.minecraft.util.registry.Registry; import net.minecraft.util.registry.RegistryKey; +import net.minecraft.village.VillagerType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.ArrayList; +import java.util.Map; +import java.util.Objects; import com.dfsek.terra.api.config.ConfigPack; import com.dfsek.terra.api.world.biome.Biome; @@ -49,7 +56,9 @@ public final class BiomeUtil { if(pack.getContext().get(PreLoadCompatibilityOptions.class).useVanillaBiomes()) { ((ProtoPlatformBiome) biome.getPlatformBiome()).setDelegate(vanilla); } else { - net.minecraft.world.biome.Biome minecraftBiome = MinecraftUtil.createBiome(biome, registry.get(vanilla)); + VanillaBiomeProperties vanillaBiomeProperties = biome.getContext().get(VanillaBiomeProperties.class); + + net.minecraft.world.biome.Biome minecraftBiome = MinecraftUtil.createBiome(biome, registry.get(vanilla), vanillaBiomeProperties); Identifier identifier = new Identifier("terra", MinecraftUtil.createBiomeID(pack, id)); @@ -63,7 +72,11 @@ public final class BiomeUtil { MinecraftUtil.registerKey(identifier).getValue(), minecraftBiome).getKey().orElseThrow()); } - + + Map villagerMap = VillagerTypeAccessor.getBiomeTypeToIdMap(); + + villagerMap.put(RegistryKey.of(Registry.BIOME_KEY, identifier), Objects.requireNonNullElse(vanillaBiomeProperties.getVillagerType(), villagerMap.getOrDefault(vanilla, VillagerType.PLAINS))); + MinecraftUtil.TERRA_BIOME_MAP.computeIfAbsent(vanilla.getValue(), i -> new ArrayList<>()).add(identifier); } } From 19e46fbe4c246d3ba4328c5551c0bf135c7317cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zo=C3=AB?= Date: Tue, 5 Jul 2022 02:24:25 -0700 Subject: [PATCH 03/14] remove dep because we shade --- platforms/quilt/src/main/resources/quilt.mod.json | 4 ---- 1 file changed, 4 deletions(-) diff --git a/platforms/quilt/src/main/resources/quilt.mod.json b/platforms/quilt/src/main/resources/quilt.mod.json index fdb6735b4..53afd8ecf 100644 --- a/platforms/quilt/src/main/resources/quilt.mod.json +++ b/platforms/quilt/src/main/resources/quilt.mod.json @@ -37,10 +37,6 @@ { "id": "minecraft", "version": "1.19.x" - }, - { - "id": "quilted_fabric_api", - "versions": ">=2.0.0-" } ] }, From 8d19368999867c268213fa5cdeba49bc4fa19ee6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zo=C3=AB?= Date: Tue, 5 Jul 2022 11:24:18 -0700 Subject: [PATCH 04/14] quilt progress --- platforms/quilt/build.gradle.kts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/platforms/quilt/build.gradle.kts b/platforms/quilt/build.gradle.kts index 365fec3bd..75484c22f 100644 --- a/platforms/quilt/build.gradle.kts +++ b/platforms/quilt/build.gradle.kts @@ -65,5 +65,7 @@ tasks { processResources { from(project(":platforms:mixin-common").file("terra.accesswidener")) + from(project(":platforms:mixin-common").file("src/main/resources/terra.common.mixins.json")) + from(project(":platforms:mixin-lifecycle").file("src/main/resources/terra.lifecycle.mixins.json")) } } From 639fc71f7af1c7ea057dd837f84c6d52275b5c68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zo=C3=AB?= Date: Tue, 5 Jul 2022 12:54:27 -0700 Subject: [PATCH 05/14] Quilt progress 2 --- .gitignore | 3 +-- .../dfsek/terra/fabric/FabricEntryPoint.java | 4 +++- .../terra/fabric/mixin/RegistryMixin.java | 18 ++++++++++++++++++ .../main/resources/terra.fabric.mixins.json | 1 + .../terra/mod/handle/MinecraftWorldHandle.java | 3 ++- .../main/resources/terra.lifecycle.mixins.json | 1 - .../com/dfsek/terra/quilt/QuiltEntryPoint.java | 6 +++++- 7 files changed, 30 insertions(+), 6 deletions(-) create mode 100644 platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/RegistryMixin.java diff --git a/.gitignore b/.gitignore index 11b505e85..63dda4360 100644 --- a/.gitignore +++ b/.gitignore @@ -247,6 +247,5 @@ nbdist/ **/testDir/ -platforms/fabric/run/** +platforms/**/run/** -platforms/forge/run/** diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricEntryPoint.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricEntryPoint.java index 403f8df56..c97f348e2 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricEntryPoint.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricEntryPoint.java @@ -19,6 +19,9 @@ package com.dfsek.terra.fabric; import cloud.commandframework.execution.CommandExecutionCoordinator; import cloud.commandframework.fabric.FabricServerCommandManager; + +import com.dfsek.terra.lifecycle.util.RegistryUtil; + import net.fabricmc.api.ModInitializer; import net.minecraft.server.command.ServerCommandSource; import org.slf4j.Logger; @@ -43,7 +46,6 @@ public class FabricEntryPoint implements ModInitializer { commandSender -> (ServerCommandSource) commandSender ); - manager.brigadierManager().setNativeNumberSuggestions(false); TERRA_PLUGIN.getEventManager().callEvent(new CommandRegistrationEvent(manager)); diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/RegistryMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/RegistryMixin.java new file mode 100644 index 000000000..1d32a1a38 --- /dev/null +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/RegistryMixin.java @@ -0,0 +1,18 @@ +package com.dfsek.terra.fabric.mixin; + +import com.dfsek.terra.lifecycle.util.RegistryUtil; + +import net.minecraft.util.registry.Registry; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + + +@Mixin(Registry.class) +public class RegistryMixin { + @Inject(method = "", at = @At("RETURN")) + private static void registerTerraGenerators(CallbackInfo ci) { + RegistryUtil.register(); + } +} \ No newline at end of file diff --git a/platforms/fabric/src/main/resources/terra.fabric.mixins.json b/platforms/fabric/src/main/resources/terra.fabric.mixins.json index f97889f6d..50c976016 100644 --- a/platforms/fabric/src/main/resources/terra.fabric.mixins.json +++ b/platforms/fabric/src/main/resources/terra.fabric.mixins.json @@ -4,6 +4,7 @@ "package": "com.dfsek.terra.fabric.mixin", "compatibilityLevel": "JAVA_17", "mixins": [ + "RegistryMixin" ], "client": [ ], diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/handle/MinecraftWorldHandle.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/handle/MinecraftWorldHandle.java index 13eef4b2d..fae4336ba 100644 --- a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/handle/MinecraftWorldHandle.java +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/handle/MinecraftWorldHandle.java @@ -31,7 +31,7 @@ import com.dfsek.terra.api.handle.WorldHandle; public class MinecraftWorldHandle implements WorldHandle { - private static final BlockState AIR = (BlockState) Blocks.AIR.getDefaultState(); + private static BlockState AIR = null; @Override public @NotNull BlockState createBlockState(@NotNull String data) { @@ -46,6 +46,7 @@ public class MinecraftWorldHandle implements WorldHandle { @Override public @NotNull BlockState air() { + if (AIR == null) AIR = (BlockState) Blocks.AIR.getDefaultState(); return AIR; } diff --git a/platforms/mixin-lifecycle/src/main/resources/terra.lifecycle.mixins.json b/platforms/mixin-lifecycle/src/main/resources/terra.lifecycle.mixins.json index ea76eb90e..58c338929 100644 --- a/platforms/mixin-lifecycle/src/main/resources/terra.lifecycle.mixins.json +++ b/platforms/mixin-lifecycle/src/main/resources/terra.lifecycle.mixins.json @@ -5,7 +5,6 @@ "compatibilityLevel": "JAVA_17", "mixins": [ "NoiseConfigMixin", - "RegistryMixin", "lifecycle.MinecraftServerMixin" ], "client": [ diff --git a/platforms/quilt/src/main/java/com/dfsek/terra/quilt/QuiltEntryPoint.java b/platforms/quilt/src/main/java/com/dfsek/terra/quilt/QuiltEntryPoint.java index f7c939fed..3faf845c6 100644 --- a/platforms/quilt/src/main/java/com/dfsek/terra/quilt/QuiltEntryPoint.java +++ b/platforms/quilt/src/main/java/com/dfsek/terra/quilt/QuiltEntryPoint.java @@ -19,6 +19,9 @@ package com.dfsek.terra.quilt; import cloud.commandframework.execution.CommandExecutionCoordinator; import cloud.commandframework.fabric.FabricServerCommandManager; + +import com.dfsek.terra.lifecycle.util.RegistryUtil; + import net.minecraft.server.command.ServerCommandSource; import org.quiltmc.loader.api.ModContainer; import org.quiltmc.qsl.base.api.entrypoint.ModInitializer; @@ -42,7 +45,8 @@ public class QuiltEntryPoint implements ModInitializer { serverCommandSource -> (CommandSender) serverCommandSource, commandSender -> (ServerCommandSource) commandSender ); - + + RegistryUtil.register(); manager.brigadierManager().setNativeNumberSuggestions(false); From b31f917acf072275c646b2bab9680c775714ac0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zo=C3=AB?= Date: Tue, 5 Jul 2022 14:17:44 -0700 Subject: [PATCH 06/14] Fix cloud in dev env --- .../com/dfsek/terra/quilt/PreLaunchHacks.java | 43 +++++++++++++++++++ .../terra/quilt/QuiltPreLaunchEntryPoint.java | 22 ++++++++++ .../quilt/src/main/resources/quilt.mod.json | 3 ++ 3 files changed, 68 insertions(+) create mode 100644 platforms/quilt/src/main/java/com/dfsek/terra/quilt/PreLaunchHacks.java create mode 100644 platforms/quilt/src/main/java/com/dfsek/terra/quilt/QuiltPreLaunchEntryPoint.java diff --git a/platforms/quilt/src/main/java/com/dfsek/terra/quilt/PreLaunchHacks.java b/platforms/quilt/src/main/java/com/dfsek/terra/quilt/PreLaunchHacks.java new file mode 100644 index 000000000..c9d42de36 --- /dev/null +++ b/platforms/quilt/src/main/java/com/dfsek/terra/quilt/PreLaunchHacks.java @@ -0,0 +1,43 @@ +package com.dfsek.terra.quilt; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.net.URL; + +/** + * So you want to Mixin into Authlib/Brigadier/DataFixerUpper, on Fabric you'll need this guy. + * + *

YOU SHOULD ONLY USE THIS CLASS DURING "preLaunch" and ONLY TARGET A CLASS WHICH IS NOT ANY CLASS YOU MIXIN TO. + * + * This will likely not work on Gson because FabricLoader has some special logic related to Gson. + */ +public final class PreLaunchHacks { + private PreLaunchHacks() {} + + private static final ClassLoader KNOT_CLASSLOADER = Thread.currentThread().getContextClassLoader(); + private static final Method ADD_URL_METHOD; + + static { + Method tempAddUrlMethod = null; + try { + tempAddUrlMethod = KNOT_CLASSLOADER.getClass().getMethod("addURL", URL.class); + tempAddUrlMethod.setAccessible(true); + } catch (ReflectiveOperationException e) { + throw new RuntimeException("Failed to load Classloader fields", e); + } + + ADD_URL_METHOD = tempAddUrlMethod; + } + + /** + * Hackily load the package which a mixin may exist within. + * + * YOU SHOULD NOT TARGET A CLASS WHICH YOU MIXIN TO. + * + * @param pathOfAClass The path of any class within the package. + */ + public static void hackilyLoadForMixin(String pathOfAClass) throws ClassNotFoundException, InvocationTargetException, IllegalAccessException { + URL url = Class.forName(pathOfAClass).getProtectionDomain().getCodeSource().getLocation(); + ADD_URL_METHOD.invoke(KNOT_CLASSLOADER, url); + } +} diff --git a/platforms/quilt/src/main/java/com/dfsek/terra/quilt/QuiltPreLaunchEntryPoint.java b/platforms/quilt/src/main/java/com/dfsek/terra/quilt/QuiltPreLaunchEntryPoint.java new file mode 100644 index 000000000..1afb1ee4e --- /dev/null +++ b/platforms/quilt/src/main/java/com/dfsek/terra/quilt/QuiltPreLaunchEntryPoint.java @@ -0,0 +1,22 @@ +package com.dfsek.terra.quilt; + +import cloud.commandframework.brigadier.BrigadierMappingBuilder; +import org.quiltmc.loader.api.ModContainer; +import org.quiltmc.loader.api.QuiltLoader; +import org.quiltmc.loader.api.entrypoint.PreLaunchEntrypoint; + +import java.lang.reflect.InvocationTargetException; + + +public class QuiltPreLaunchEntryPoint implements PreLaunchEntrypoint { + @Override + public void onPreLaunch(ModContainer mod) { + if (QuiltLoader.isDevelopmentEnvironment()) { + try { + PreLaunchHacks.hackilyLoadForMixin(BrigadierMappingBuilder.class.getName()); + } catch(ClassNotFoundException | InvocationTargetException | IllegalAccessException e) { + throw new RuntimeException(e); + } + } + } +} diff --git a/platforms/quilt/src/main/resources/quilt.mod.json b/platforms/quilt/src/main/resources/quilt.mod.json index 53afd8ecf..fbf0b5470 100644 --- a/platforms/quilt/src/main/resources/quilt.mod.json +++ b/platforms/quilt/src/main/resources/quilt.mod.json @@ -23,6 +23,9 @@ "entrypoints": { "init": [ "com.dfsek.terra.quilt.QuiltEntryPoint" + ], + "pre_launch": [ + "com.dfsek.terra.quilt.QuiltPreLaunchEntryPoint" ] }, "depends": [ From 60046c466480b7db988a9910dc9e3d2272515b29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zo=C3=AB?= Date: Tue, 5 Jul 2022 12:54:27 -0700 Subject: [PATCH 07/14] Revert "Quilt progress 2" This reverts commit 639fc71f7af1c7ea057dd837f84c6d52275b5c68. --- .gitignore | 3 ++- .../dfsek/terra/fabric/FabricEntryPoint.java | 4 +--- .../terra/fabric/mixin/RegistryMixin.java | 18 ------------------ .../main/resources/terra.fabric.mixins.json | 1 - .../terra/mod/handle/MinecraftWorldHandle.java | 3 +-- .../main/resources/terra.lifecycle.mixins.json | 1 + .../com/dfsek/terra/quilt/QuiltEntryPoint.java | 6 +----- 7 files changed, 6 insertions(+), 30 deletions(-) delete mode 100644 platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/RegistryMixin.java diff --git a/.gitignore b/.gitignore index 63dda4360..11b505e85 100644 --- a/.gitignore +++ b/.gitignore @@ -247,5 +247,6 @@ nbdist/ **/testDir/ -platforms/**/run/** +platforms/fabric/run/** +platforms/forge/run/** diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricEntryPoint.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricEntryPoint.java index c97f348e2..403f8df56 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricEntryPoint.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricEntryPoint.java @@ -19,9 +19,6 @@ package com.dfsek.terra.fabric; import cloud.commandframework.execution.CommandExecutionCoordinator; import cloud.commandframework.fabric.FabricServerCommandManager; - -import com.dfsek.terra.lifecycle.util.RegistryUtil; - import net.fabricmc.api.ModInitializer; import net.minecraft.server.command.ServerCommandSource; import org.slf4j.Logger; @@ -46,6 +43,7 @@ public class FabricEntryPoint implements ModInitializer { commandSender -> (ServerCommandSource) commandSender ); + manager.brigadierManager().setNativeNumberSuggestions(false); TERRA_PLUGIN.getEventManager().callEvent(new CommandRegistrationEvent(manager)); diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/RegistryMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/RegistryMixin.java deleted file mode 100644 index 1d32a1a38..000000000 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/RegistryMixin.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.dfsek.terra.fabric.mixin; - -import com.dfsek.terra.lifecycle.util.RegistryUtil; - -import net.minecraft.util.registry.Registry; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - - -@Mixin(Registry.class) -public class RegistryMixin { - @Inject(method = "", at = @At("RETURN")) - private static void registerTerraGenerators(CallbackInfo ci) { - RegistryUtil.register(); - } -} \ No newline at end of file diff --git a/platforms/fabric/src/main/resources/terra.fabric.mixins.json b/platforms/fabric/src/main/resources/terra.fabric.mixins.json index 50c976016..f97889f6d 100644 --- a/platforms/fabric/src/main/resources/terra.fabric.mixins.json +++ b/platforms/fabric/src/main/resources/terra.fabric.mixins.json @@ -4,7 +4,6 @@ "package": "com.dfsek.terra.fabric.mixin", "compatibilityLevel": "JAVA_17", "mixins": [ - "RegistryMixin" ], "client": [ ], diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/handle/MinecraftWorldHandle.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/handle/MinecraftWorldHandle.java index fae4336ba..13eef4b2d 100644 --- a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/handle/MinecraftWorldHandle.java +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/handle/MinecraftWorldHandle.java @@ -31,7 +31,7 @@ import com.dfsek.terra.api.handle.WorldHandle; public class MinecraftWorldHandle implements WorldHandle { - private static BlockState AIR = null; + private static final BlockState AIR = (BlockState) Blocks.AIR.getDefaultState(); @Override public @NotNull BlockState createBlockState(@NotNull String data) { @@ -46,7 +46,6 @@ public class MinecraftWorldHandle implements WorldHandle { @Override public @NotNull BlockState air() { - if (AIR == null) AIR = (BlockState) Blocks.AIR.getDefaultState(); return AIR; } diff --git a/platforms/mixin-lifecycle/src/main/resources/terra.lifecycle.mixins.json b/platforms/mixin-lifecycle/src/main/resources/terra.lifecycle.mixins.json index 58c338929..ea76eb90e 100644 --- a/platforms/mixin-lifecycle/src/main/resources/terra.lifecycle.mixins.json +++ b/platforms/mixin-lifecycle/src/main/resources/terra.lifecycle.mixins.json @@ -5,6 +5,7 @@ "compatibilityLevel": "JAVA_17", "mixins": [ "NoiseConfigMixin", + "RegistryMixin", "lifecycle.MinecraftServerMixin" ], "client": [ diff --git a/platforms/quilt/src/main/java/com/dfsek/terra/quilt/QuiltEntryPoint.java b/platforms/quilt/src/main/java/com/dfsek/terra/quilt/QuiltEntryPoint.java index 3faf845c6..f7c939fed 100644 --- a/platforms/quilt/src/main/java/com/dfsek/terra/quilt/QuiltEntryPoint.java +++ b/platforms/quilt/src/main/java/com/dfsek/terra/quilt/QuiltEntryPoint.java @@ -19,9 +19,6 @@ package com.dfsek.terra.quilt; import cloud.commandframework.execution.CommandExecutionCoordinator; import cloud.commandframework.fabric.FabricServerCommandManager; - -import com.dfsek.terra.lifecycle.util.RegistryUtil; - import net.minecraft.server.command.ServerCommandSource; import org.quiltmc.loader.api.ModContainer; import org.quiltmc.qsl.base.api.entrypoint.ModInitializer; @@ -45,8 +42,7 @@ public class QuiltEntryPoint implements ModInitializer { serverCommandSource -> (CommandSender) serverCommandSource, commandSender -> (ServerCommandSource) commandSender ); - - RegistryUtil.register(); + manager.brigadierManager().setNativeNumberSuggestions(false); From 0ee359b0a3091f12f7b46de1867bc8092fe8963a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zo=C3=AB?= Date: Tue, 5 Jul 2022 14:18:26 -0700 Subject: [PATCH 08/14] Git ignore --- .gitignore | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 11b505e85..63dda4360 100644 --- a/.gitignore +++ b/.gitignore @@ -247,6 +247,5 @@ nbdist/ **/testDir/ -platforms/fabric/run/** +platforms/**/run/** -platforms/forge/run/** From b6d8453042757a6bb85c9732b93a57f61d09d231 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zo=C3=AB?= Date: Tue, 5 Jul 2022 16:36:30 -0700 Subject: [PATCH 09/14] update QSL --- buildSrc/src/main/kotlin/Versions.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildSrc/src/main/kotlin/Versions.kt b/buildSrc/src/main/kotlin/Versions.kt index d5a77a8c4..481247b17 100644 --- a/buildSrc/src/main/kotlin/Versions.kt +++ b/buildSrc/src/main/kotlin/Versions.kt @@ -28,7 +28,7 @@ object Versions { object Quilt { const val quiltLoader = "0.17.0" const val loom = "0.12.+" - const val fabricApi = "2.0.0-alpha.2+0.55.3-1.19" + const val fabricApi = "2.0.0-beta.4+0.57.0-1.19" } object Mod { From b7343ca3271b2250f255a97cd95558fbeda09c31 Mon Sep 17 00:00:00 2001 From: dfsek Date: Tue, 5 Jul 2022 18:04:39 -0700 Subject: [PATCH 10/14] fix typo --- buildSrc/src/main/kotlin/Versions.kt | 2 +- platforms/fabric/build.gradle.kts | 2 +- platforms/forge/build.gradle.kts | 2 +- platforms/mixin-common/build.gradle.kts | 2 +- platforms/mixin-lifecycle/build.gradle.kts | 2 +- platforms/quilt/build.gradle.kts | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/buildSrc/src/main/kotlin/Versions.kt b/buildSrc/src/main/kotlin/Versions.kt index d5a77a8c4..703873929 100644 --- a/buildSrc/src/main/kotlin/Versions.kt +++ b/buildSrc/src/main/kotlin/Versions.kt @@ -37,7 +37,7 @@ object Versions { const val fabricLoader = "0.14.2" const val architecuryLoom = "0.12.0-SNAPSHOT" - const val architectutyPlugin = "3.4-SNAPSHOT" + const val architecturyPlugin = "3.4-SNAPSHOT" const val loomQuiltflower = "1.7.1" } diff --git a/platforms/fabric/build.gradle.kts b/platforms/fabric/build.gradle.kts index d73796332..1c79fbf62 100644 --- a/platforms/fabric/build.gradle.kts +++ b/platforms/fabric/build.gradle.kts @@ -1,6 +1,6 @@ plugins { id("fabric-loom") version Versions.Fabric.loom - id("architectury-plugin") version Versions.Mod.architectutyPlugin + id("architectury-plugin") version Versions.Mod.architecturyPlugin id("io.github.juuxel.loom-quiltflower") version Versions.Mod.loomQuiltflower } diff --git a/platforms/forge/build.gradle.kts b/platforms/forge/build.gradle.kts index fc967677e..602f85976 100644 --- a/platforms/forge/build.gradle.kts +++ b/platforms/forge/build.gradle.kts @@ -1,6 +1,6 @@ plugins { id("dev.architectury.loom") version Versions.Mod.architecuryLoom - id("architectury-plugin") version Versions.Mod.architectutyPlugin + id("architectury-plugin") version Versions.Mod.architecturyPlugin id("io.github.juuxel.loom-quiltflower") version Versions.Mod.loomQuiltflower } diff --git a/platforms/mixin-common/build.gradle.kts b/platforms/mixin-common/build.gradle.kts index 47b720ca2..f9d382c58 100644 --- a/platforms/mixin-common/build.gradle.kts +++ b/platforms/mixin-common/build.gradle.kts @@ -1,6 +1,6 @@ plugins { id("dev.architectury.loom") version Versions.Mod.architecuryLoom - id("architectury-plugin") version Versions.Mod.architectutyPlugin + id("architectury-plugin") version Versions.Mod.architecturyPlugin id("io.github.juuxel.loom-quiltflower") version Versions.Mod.loomQuiltflower } diff --git a/platforms/mixin-lifecycle/build.gradle.kts b/platforms/mixin-lifecycle/build.gradle.kts index ded26a47c..7ccf286d7 100644 --- a/platforms/mixin-lifecycle/build.gradle.kts +++ b/platforms/mixin-lifecycle/build.gradle.kts @@ -1,6 +1,6 @@ plugins { id("dev.architectury.loom") version Versions.Mod.architecuryLoom - id("architectury-plugin") version Versions.Mod.architectutyPlugin + id("architectury-plugin") version Versions.Mod.architecturyPlugin id("io.github.juuxel.loom-quiltflower") version Versions.Mod.loomQuiltflower } diff --git a/platforms/quilt/build.gradle.kts b/platforms/quilt/build.gradle.kts index 75484c22f..68a48fd41 100644 --- a/platforms/quilt/build.gradle.kts +++ b/platforms/quilt/build.gradle.kts @@ -1,6 +1,6 @@ plugins { id("org.quiltmc.loom") version Versions.Quilt.loom - id("architectury-plugin") version Versions.Mod.architectutyPlugin + id("architectury-plugin") version Versions.Mod.architecturyPlugin } From 29e1d05c710910e655b4a89474d092daa0801dbb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zo=C3=AB?= Date: Tue, 5 Jul 2022 22:57:03 -0700 Subject: [PATCH 11/14] quilt works! --- platforms/mixin-lifecycle/build.gradle.kts | 45 +++++++++++++++++----- platforms/quilt/build.gradle.kts | 42 ++++++++------------ platforms/quilt/gradle.properties | 1 + 3 files changed, 53 insertions(+), 35 deletions(-) create mode 100644 platforms/quilt/gradle.properties diff --git a/platforms/mixin-lifecycle/build.gradle.kts b/platforms/mixin-lifecycle/build.gradle.kts index 7ccf286d7..a9fcf8b17 100644 --- a/platforms/mixin-lifecycle/build.gradle.kts +++ b/platforms/mixin-lifecycle/build.gradle.kts @@ -4,6 +4,30 @@ plugins { id("io.github.juuxel.loom-quiltflower") version Versions.Mod.loomQuiltflower } +architectury { + platformSetupLoomIde() + fabric() +} + +configurations { + val common by creating + compileClasspath.get().extendsFrom(common) + runtimeClasspath.get().extendsFrom(common) +} + +dependencies { + shadedApi(project(":common:implementation:base")) + + compileOnly("net.fabricmc:sponge-mixin:${Versions.Fabric.mixin}") + annotationProcessor("net.fabricmc:sponge-mixin:${Versions.Fabric.mixin}") + annotationProcessor("net.fabricmc:fabric-loom:${Versions.Fabric.loom}") + + "common"(project(path = ":platforms:mixin-common", configuration = "namedElements")) { isTransitive = false } + + minecraft("com.mojang:minecraft:${Versions.Mod.minecraft}") + mappings("net.fabricmc:yarn:${Versions.Mod.yarn}:v2") +} + loom { accessWidenerPath.set(project(":platforms:mixin-common").file("terra.accesswidener")) @@ -12,20 +36,21 @@ loom { } } -dependencies { - shadedApi(project(":common:implementation:base")) +tasks { + compileJava { + options.release.set(17) + } - modImplementation("net.fabricmc:fabric-loader:${Versions.Mod.fabricLoader}") - compileOnly("net.fabricmc:sponge-mixin:${Versions.Fabric.mixin}") + remapJar { + inputFile.set(shadowJar.get().archiveFile) + } - compileOnly(project(path = ":platforms:mixin-common", configuration = "namedElements")) { isTransitive = false } - - minecraft("com.mojang:minecraft:${Versions.Mod.minecraft}") - mappings("net.fabricmc:yarn:${Versions.Mod.yarn}:v2") + processResources { + from(project(":platforms:mixin-common").file("terra.accesswidener")) + } } architectury { common("fabric", "quilt") minecraft = Versions.Mod.minecraft -} - +} \ No newline at end of file diff --git a/platforms/quilt/build.gradle.kts b/platforms/quilt/build.gradle.kts index 68a48fd41..70d593ccc 100644 --- a/platforms/quilt/build.gradle.kts +++ b/platforms/quilt/build.gradle.kts @@ -1,21 +1,21 @@ plugins { - id("org.quiltmc.loom") version Versions.Quilt.loom + id("dev.architectury.loom") version Versions.Mod.architecuryLoom id("architectury-plugin") version Versions.Mod.architecturyPlugin } - -configurations { - val common by creating - compileClasspath.get().extendsFrom(common) - runtimeClasspath.get().extendsFrom(common) +architectury { + platformSetupLoomIde() + loader("quilt") } dependencies { shadedApi(project(":common:implementation:base")) - "common"(project(path = ":platforms:mixin-common", configuration = "namedElements")) { isTransitive = false } + implementation(project(path = ":platforms:mixin-common", configuration = "namedElements")) { isTransitive = false } + "developmentQuilt"(project(path = ":platforms:mixin-common", configuration = "namedElements")) { isTransitive = false } shaded(project(path = ":platforms:mixin-common", configuration = "transformProductionQuilt")) { isTransitive = false } - "common"(project(path = ":platforms:mixin-lifecycle", configuration = "namedElements")) { isTransitive = false } + implementation(project(path = ":platforms:mixin-lifecycle", configuration = "namedElements")) { isTransitive = false } + "developmentQuilt"(project(path = ":platforms:mixin-lifecycle", configuration = "namedElements")) { isTransitive = false } shaded(project(path = ":platforms:mixin-lifecycle", configuration = "transformProductionQuilt")) { isTransitive = false } @@ -24,22 +24,16 @@ dependencies { modImplementation("org.quiltmc:quilt-loader:${Versions.Quilt.quiltLoader}") - modApi("org.quiltmc.quilted-fabric-api:quilted-fabric-api:${Versions.Quilt.fabricApi}") - - setOf( - "fabric-lifecycle-events-v1", - "fabric-resource-loader-v0", - "fabric-api-base", - "fabric-command-api-v2", - "fabric-networking-api-v1" - ).forEach { apiModule -> - val module = fabricApi.module(apiModule, Versions.Fabric.fabricAPI) - modImplementation(module) - include(module) + modImplementation("org.quiltmc.quilted-fabric-api:quilted-fabric-api:${Versions.Quilt.fabricApi}") + + modImplementation("cloud.commandframework", "cloud-fabric", Versions.Libraries.cloud) { + exclude("net.fabricmc") + exclude("net.fabricmc.fabric-api") + } + include("cloud.commandframework", "cloud-fabric", Versions.Libraries.cloud) { + exclude("net.fabricmc") + exclude("net.fabricmc.fabric-api") } - - modImplementation("cloud.commandframework", "cloud-fabric", Versions.Libraries.cloud) - include("cloud.commandframework", "cloud-fabric", Versions.Libraries.cloud) } loom { @@ -65,7 +59,5 @@ tasks { processResources { from(project(":platforms:mixin-common").file("terra.accesswidener")) - from(project(":platforms:mixin-common").file("src/main/resources/terra.common.mixins.json")) - from(project(":platforms:mixin-lifecycle").file("src/main/resources/terra.lifecycle.mixins.json")) } } diff --git a/platforms/quilt/gradle.properties b/platforms/quilt/gradle.properties new file mode 100644 index 000000000..96758ce85 --- /dev/null +++ b/platforms/quilt/gradle.properties @@ -0,0 +1 @@ +loom.platform=quilt \ No newline at end of file From 36ceabd749eb41d0b14bccd3c1e51f7f8587ba9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zo=C3=AB?= Date: Wed, 6 Jul 2022 00:26:42 -0700 Subject: [PATCH 12/14] Refactor Mixin build setup --- buildSrc/src/main/kotlin/DependencyConfig.kt | 3 ++ buildSrc/src/main/kotlin/Versions.kt | 15 ++++---- .../structure-sponge-loader/build.gradle.kts | 4 -- platforms/cli/build.gradle.kts | 11 ++---- platforms/fabric/build.gradle.kts | 37 ++++++++++--------- platforms/fabric/gradle.properties | 1 + .../fabric/src/main/resources/fabric.mod.json | 3 +- platforms/forge/build.gradle.kts | 35 +++++++----------- platforms/mixin-common/build.gradle.kts | 5 ++- .../main/resources}/terra.accesswidener | 0 platforms/mixin-lifecycle/build.gradle.kts | 24 ++---------- platforms/quilt/build.gradle.kts | 23 +++++++++--- .../quilt/src/main/resources/quilt.mod.json | 3 +- 13 files changed, 75 insertions(+), 89 deletions(-) create mode 100644 platforms/fabric/gradle.properties rename platforms/mixin-common/{ => src/main/resources}/terra.accesswidener (100%) diff --git a/buildSrc/src/main/kotlin/DependencyConfig.kt b/buildSrc/src/main/kotlin/DependencyConfig.kt index 55f6f18b6..d31736022 100644 --- a/buildSrc/src/main/kotlin/DependencyConfig.kt +++ b/buildSrc/src/main/kotlin/DependencyConfig.kt @@ -45,6 +45,9 @@ fun Project.configureDependencies() { maven ("https://maven.quiltmc.org/repository/release/") { name = "Quilt" } + maven("https://jitpack.io") { + name = "JitPack" + } } dependencies { diff --git a/buildSrc/src/main/kotlin/Versions.kt b/buildSrc/src/main/kotlin/Versions.kt index c7d2193e5..ef3ce2946 100644 --- a/buildSrc/src/main/kotlin/Versions.kt +++ b/buildSrc/src/main/kotlin/Versions.kt @@ -18,20 +18,18 @@ object Versions { } object Fabric { - const val fabricLoader = "0.14.2" - const val fabricAPI = "0.56.0+1.19" - const val mixin = "0.11.2+mixin.0.8.5" - const val loom = "0.12-SNAPSHOT" - const val minotaur = "1.1.0" + const val fabricLoader = "0.14.8" + const val fabricAPI = "0.57.0+1.19" } object Quilt { const val quiltLoader = "0.17.0" - const val loom = "0.12.+" const val fabricApi = "2.0.0-beta.4+0.57.0-1.19" } object Mod { + const val mixin = "0.11.2+mixin.0.8.5" + const val minecraft = "1.19" const val yarn = "$minecraft+build.1" const val fabricLoader = "0.14.2" @@ -40,10 +38,12 @@ object Versions { const val architecturyPlugin = "3.4-SNAPSHOT" const val loomQuiltflower = "1.7.1" + + const val lazyDfu = "0.1.2" } object Forge { - const val forge = "${Mod.minecraft}-41.0.38" + const val forge = "${Mod.minecraft}-41.0.63" const val burningwave = "12.53.0" } @@ -64,5 +64,6 @@ object Versions { const val nbt = "6.1" const val logback = "1.2.9" const val commonsIO = "2.7" + const val guava = "31.0.1-jre" } } \ No newline at end of file diff --git a/common/addons/structure-sponge-loader/build.gradle.kts b/common/addons/structure-sponge-loader/build.gradle.kts index d064e4fd5..dba93405f 100644 --- a/common/addons/structure-sponge-loader/build.gradle.kts +++ b/common/addons/structure-sponge-loader/build.gradle.kts @@ -2,10 +2,6 @@ import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar version = version("1.0.0") -repositories { - maven { url = uri("https://jitpack.io/") } -} - dependencies { api("commons-io:commons-io:2.7") api("com.github.Querz:NBT:6.1") diff --git a/platforms/cli/build.gradle.kts b/platforms/cli/build.gradle.kts index 26d9f3d6c..e273422af 100644 --- a/platforms/cli/build.gradle.kts +++ b/platforms/cli/build.gradle.kts @@ -2,18 +2,15 @@ plugins { application } -repositories { - maven { url = uri("https://jitpack.io/") } -} - val javaMainClass = "com.dfsek.terra.cli.TerraCLI" dependencies { - shadedApi("commons-io:commons-io:${Versions.CLI.commonsIO}") - shadedApi("com.github.Querz:NBT:${Versions.CLI.nbt}") shadedApi(project(":common:implementation:base")) - shadedImplementation("com.google.guava:guava:31.0.1-jre") + shadedApi("commons-io:commons-io:${Versions.CLI.commonsIO}") + shadedApi("com.github.Querz:NBT:${Versions.CLI.nbt}") + + shadedImplementation("com.google.guava:guava:${Versions.CLI.guava}") shadedImplementation("ch.qos.logback:logback-classic:${Versions.CLI.logback}") diff --git a/platforms/fabric/build.gradle.kts b/platforms/fabric/build.gradle.kts index 1c79fbf62..85a829444 100644 --- a/platforms/fabric/build.gradle.kts +++ b/platforms/fabric/build.gradle.kts @@ -1,26 +1,22 @@ plugins { - id("fabric-loom") version Versions.Fabric.loom + id("dev.architectury.loom") version Versions.Mod.architecuryLoom id("architectury-plugin") version Versions.Mod.architecturyPlugin id("io.github.juuxel.loom-quiltflower") version Versions.Mod.loomQuiltflower } - -configurations { - val common by creating - compileClasspath.get().extendsFrom(common) - runtimeClasspath.get().extendsFrom(common) +architectury { + platformSetupLoomIde() + loader("fabric") } dependencies { shadedApi(project(":common:implementation:base")) - compileOnly("net.fabricmc:sponge-mixin:${Versions.Fabric.mixin}") - annotationProcessor("net.fabricmc:sponge-mixin:${Versions.Fabric.mixin}") - annotationProcessor("net.fabricmc:fabric-loom:${Versions.Fabric.loom}") - - "common"(project(path = ":platforms:mixin-common", configuration = "namedElements")) { isTransitive = false } + implementation(project(path = ":platforms:mixin-common", configuration = "namedElements")) { isTransitive = false } + "developmentFabric"(project(path = ":platforms:mixin-common", configuration = "namedElements")) { isTransitive = false } shaded(project(path = ":platforms:mixin-common", configuration = "transformProductionFabric")) { isTransitive = false } - "common"(project(path = ":platforms:mixin-lifecycle", configuration = "namedElements")) { isTransitive = false } + implementation(project(path = ":platforms:mixin-lifecycle", configuration = "namedElements")) { isTransitive = false } + "developmentFabric"(project(path = ":platforms:mixin-lifecycle", configuration = "namedElements")) { isTransitive = false } shaded(project(path = ":platforms:mixin-lifecycle", configuration = "transformProductionFabric")) { isTransitive = false } @@ -37,15 +33,25 @@ dependencies { modImplementation("cloud.commandframework", "cloud-fabric", Versions.Libraries.cloud) include("cloud.commandframework", "cloud-fabric", Versions.Libraries.cloud) + + modLocalRuntime("com.github.astei:lazydfu:${Versions.Mod.lazyDfu}") } loom { - accessWidenerPath.set(project(":platforms:mixin-common").file("terra.accesswidener")) + accessWidenerPath.set(project(":platforms:mixin-common").file("src/main/resources/terra.accesswidener")) mixin { defaultRefmapName.set("terra.fabric.refmap.json") } + launches { + named("client") { + property("fabric.log.level", "debug") + } + named("server") { + property("fabric.log.level", "debug") + } + } } @@ -57,11 +63,8 @@ tasks { } remapJar { + injectAccessWidener.set(true) inputFile.set(shadowJar.get().archiveFile) archiveFileName.set("${rootProject.name.capitalize()}-${project.version}.jar") } - - processResources { - from(project(":platforms:mixin-common").file("terra.accesswidener")) - } } diff --git a/platforms/fabric/gradle.properties b/platforms/fabric/gradle.properties new file mode 100644 index 000000000..90ee7a259 --- /dev/null +++ b/platforms/fabric/gradle.properties @@ -0,0 +1 @@ +loom.platform=fabric \ No newline at end of file diff --git a/platforms/fabric/src/main/resources/fabric.mod.json b/platforms/fabric/src/main/resources/fabric.mod.json index 65289db22..e71bcfeac 100644 --- a/platforms/fabric/src/main/resources/fabric.mod.json +++ b/platforms/fabric/src/main/resources/fabric.mod.json @@ -29,6 +29,5 @@ "fabricloader": ">=0.14.2", "java": ">=17", "minecraft": "1.19.x" - }, - "accessWidener": "terra.accesswidener" + } } \ No newline at end of file diff --git a/platforms/forge/build.gradle.kts b/platforms/forge/build.gradle.kts index 602f85976..6b545f2ba 100644 --- a/platforms/forge/build.gradle.kts +++ b/platforms/forge/build.gradle.kts @@ -6,26 +6,16 @@ plugins { architectury { platformSetupLoomIde() - forge() -} - -configurations { - val common by creating - compileClasspath.get().extendsFrom(common) - runtimeClasspath.get().extendsFrom(common) + loader("forge") } dependencies { shadedApi(project(":common:implementation:base")) "forgeRuntimeLibrary"(project(":common:implementation:base")) - - "common"(project(path = ":platforms:mixin-common", configuration = "namedElements")) { isTransitive = false } + implementation(project(path = ":platforms:mixin-common", configuration = "namedElements")) { isTransitive = false } + "developmentForge"(project(path = ":platforms:mixin-common", configuration = "namedElements")) { isTransitive = false } shaded(project(path = ":platforms:mixin-common", configuration = "transformProductionForge")) { isTransitive = false } - "developmentForge"(project(path = ":platforms:mixin-common", configuration = "namedElements")) { - isTransitive = false - } - forge(group = "net.minecraftforge", name = "forge", version = Versions.Forge.forge) @@ -38,12 +28,21 @@ dependencies { } loom { - accessWidenerPath.set(project(":platforms:mixin-common").file("terra.accesswidener")) + accessWidenerPath.set(project(":platforms:mixin-common").file("src/main/resources/terra.accesswidener")) mixin { defaultRefmapName.set("terra.forge.refmap.json") } + launches { + named("client") { + property("fabric.log.level", "debug") + } + named("server") { + property("fabric.log.level", "debug") + } + } + forge { convertAccessWideners.set(true) mixinConfig("terra.common.mixins.json") @@ -66,17 +65,9 @@ tasks { ) } } - - shadowJar { - exclude("fabric.mod.json") - } remapJar { inputFile.set(shadowJar.get().archiveFile) archiveFileName.set("${rootProject.name.capitalize()}-${project.version}.jar") } - - processResources { - from(project(":platforms:mixin-common").file("terra.accesswidener")) - } } \ No newline at end of file diff --git a/platforms/mixin-common/build.gradle.kts b/platforms/mixin-common/build.gradle.kts index f9d382c58..c270dbf53 100644 --- a/platforms/mixin-common/build.gradle.kts +++ b/platforms/mixin-common/build.gradle.kts @@ -5,7 +5,7 @@ plugins { } loom { - accessWidenerPath.set(file("terra.accesswidener")) + accessWidenerPath.set(file("src/main/resources/terra.accesswidener")) mixin { defaultRefmapName.set("terra.common.refmap.json") @@ -15,7 +15,8 @@ loom { dependencies { shadedApi(project(":common:implementation:base")) - modImplementation("net.fabricmc:fabric-loader:${Versions.Mod.fabricLoader}") + compileOnly("net.fabricmc:sponge-mixin:${Versions.Mod.mixin}") + annotationProcessor("net.fabricmc:sponge-mixin:${Versions.Mod.mixin}") minecraft("com.mojang:minecraft:${Versions.Mod.minecraft}") mappings("net.fabricmc:yarn:${Versions.Mod.yarn}:v2") diff --git a/platforms/mixin-common/terra.accesswidener b/platforms/mixin-common/src/main/resources/terra.accesswidener similarity index 100% rename from platforms/mixin-common/terra.accesswidener rename to platforms/mixin-common/src/main/resources/terra.accesswidener diff --git a/platforms/mixin-lifecycle/build.gradle.kts b/platforms/mixin-lifecycle/build.gradle.kts index a9fcf8b17..eb8459b4e 100644 --- a/platforms/mixin-lifecycle/build.gradle.kts +++ b/platforms/mixin-lifecycle/build.gradle.kts @@ -4,32 +4,20 @@ plugins { id("io.github.juuxel.loom-quiltflower") version Versions.Mod.loomQuiltflower } -architectury { - platformSetupLoomIde() - fabric() -} - -configurations { - val common by creating - compileClasspath.get().extendsFrom(common) - runtimeClasspath.get().extendsFrom(common) -} - dependencies { shadedApi(project(":common:implementation:base")) - compileOnly("net.fabricmc:sponge-mixin:${Versions.Fabric.mixin}") - annotationProcessor("net.fabricmc:sponge-mixin:${Versions.Fabric.mixin}") - annotationProcessor("net.fabricmc:fabric-loom:${Versions.Fabric.loom}") + compileOnly("net.fabricmc:sponge-mixin:${Versions.Mod.mixin}") + annotationProcessor("net.fabricmc:sponge-mixin:${Versions.Mod.mixin}") - "common"(project(path = ":platforms:mixin-common", configuration = "namedElements")) { isTransitive = false } + implementation(project(path = ":platforms:mixin-common", configuration = "namedElements")) { isTransitive = false } minecraft("com.mojang:minecraft:${Versions.Mod.minecraft}") mappings("net.fabricmc:yarn:${Versions.Mod.yarn}:v2") } loom { - accessWidenerPath.set(project(":platforms:mixin-common").file("terra.accesswidener")) + accessWidenerPath.set(project(":platforms:mixin-common").file("src/main/resources/terra.accesswidener")) mixin { defaultRefmapName.set("terra.lifecycle.refmap.json") @@ -44,10 +32,6 @@ tasks { remapJar { inputFile.set(shadowJar.get().archiveFile) } - - processResources { - from(project(":platforms:mixin-common").file("terra.accesswidener")) - } } architectury { diff --git a/platforms/quilt/build.gradle.kts b/platforms/quilt/build.gradle.kts index 70d593ccc..ead32bd01 100644 --- a/platforms/quilt/build.gradle.kts +++ b/platforms/quilt/build.gradle.kts @@ -1,6 +1,7 @@ plugins { id("dev.architectury.loom") version Versions.Mod.architecuryLoom id("architectury-plugin") version Versions.Mod.architecturyPlugin + id("io.github.juuxel.loom-quiltflower") version Versions.Mod.loomQuiltflower } architectury { @@ -18,7 +19,6 @@ dependencies { "developmentQuilt"(project(path = ":platforms:mixin-lifecycle", configuration = "namedElements")) { isTransitive = false } shaded(project(path = ":platforms:mixin-lifecycle", configuration = "transformProductionQuilt")) { isTransitive = false } - minecraft("com.mojang:minecraft:${Versions.Mod.minecraft}") mappings("net.fabricmc:yarn:${Versions.Mod.yarn}:v2") @@ -34,14 +34,28 @@ dependencies { exclude("net.fabricmc") exclude("net.fabricmc.fabric-api") } + + modLocalRuntime("com.github.astei:lazydfu:${Versions.Mod.lazyDfu}") { + exclude("net.fabricmc") + exclude("net.fabricmc.fabric-api") + } } loom { - accessWidenerPath.set(project(":platforms:mixin-common").file("terra.accesswidener")) + accessWidenerPath.set(project(":platforms:mixin-common").file("src/main/resources/terra.accesswidener")) mixin { defaultRefmapName.set("terra.quilt.refmap.json") } + + launches { + named("client") { + property("fabric.log.level", "debug") + } + named("server") { + property("fabric.log.level", "debug") + } + } } @@ -53,11 +67,8 @@ tasks { } remapJar { + injectAccessWidener.set(true) inputFile.set(shadowJar.get().archiveFile) archiveFileName.set("${rootProject.name.capitalize()}-${project.version}.jar") } - - processResources { - from(project(":platforms:mixin-common").file("terra.accesswidener")) - } } diff --git a/platforms/quilt/src/main/resources/quilt.mod.json b/platforms/quilt/src/main/resources/quilt.mod.json index fbf0b5470..6ea8b960f 100644 --- a/platforms/quilt/src/main/resources/quilt.mod.json +++ b/platforms/quilt/src/main/resources/quilt.mod.json @@ -47,6 +47,5 @@ "terra.quilt.mixins.json", "terra.lifecycle.mixins.json", "terra.common.mixins.json" - ], - "accessWidener": "terra.accesswidener" + ] } \ No newline at end of file From 10d44ce2178f99c0d357c58c48211c42221bbe10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zo=C3=AB?= Date: Wed, 6 Jul 2022 00:51:47 -0700 Subject: [PATCH 13/14] Expand the AwfulHacks series --- .../bukkit/nms/v1_18_R2/AwfulBukkitHacks.java | 106 ++++++++++++++++++ .../bukkit/nms/v1_18_R2/NMSBiomeInjector.java | 80 +------------ .../bukkit/nms/v1_18_R2/NMSInitializer.java | 2 +- .../bukkit/nms/v1_19_R1/AwfulBukkitHacks.java | 102 +++++++++++++++++ .../bukkit/nms/v1_19_R1/NMSBiomeInjector.java | 83 +------------- .../bukkit/nms/v1_19_R1/NMSInitializer.java | 2 +- ...eLaunchHacks.java => AwfulQuiltHacks.java} | 4 +- .../terra/quilt/QuiltPreLaunchEntryPoint.java | 2 +- 8 files changed, 216 insertions(+), 165 deletions(-) create mode 100644 platforms/bukkit/nms/v1_18_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_18_R2/AwfulBukkitHacks.java create mode 100644 platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/AwfulBukkitHacks.java rename platforms/quilt/src/main/java/com/dfsek/terra/quilt/{PreLaunchHacks.java => AwfulQuiltHacks.java} (95%) diff --git a/platforms/bukkit/nms/v1_18_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_18_R2/AwfulBukkitHacks.java b/platforms/bukkit/nms/v1_18_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_18_R2/AwfulBukkitHacks.java new file mode 100644 index 000000000..e530ec04a --- /dev/null +++ b/platforms/bukkit/nms/v1_18_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_18_R2/AwfulBukkitHacks.java @@ -0,0 +1,106 @@ +package com.dfsek.terra.bukkit.nms.v1_18_R2; + +import com.dfsek.terra.bukkit.world.BukkitPlatformBiome; +import com.dfsek.terra.registry.master.ConfigRegistry; + +import com.google.common.collect.ImmutableMap; +import com.mojang.serialization.Lifecycle; +import net.minecraft.core.Holder; +import net.minecraft.core.MappedRegistry; +import net.minecraft.core.Registry; +import net.minecraft.core.WritableRegistry; +import net.minecraft.data.BuiltinRegistries; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.TagKey; +import net.minecraft.world.level.biome.Biome; +import org.bukkit.NamespacedKey; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +public class AwfulBukkitHacks { + private static final Logger LOGGER = LoggerFactory.getLogger(NMSBiomeInjector.class); + private static final Map> terraBiomeMap = new HashMap<>(); + + + public static void registerBiomes(ConfigRegistry configRegistry) { + try { + LOGGER.info("Hacking biome registry..."); + WritableRegistry biomeRegistry = (WritableRegistry) Registries.biomeRegistry(); + + Reflection.MAPPED_REGISTRY.setFrozen((MappedRegistry) biomeRegistry, false); + + configRegistry.forEach(pack -> pack.getRegistry(com.dfsek.terra.api.world.biome.Biome.class).forEach((key, biome) -> { + try { + BukkitPlatformBiome platformBiome = (BukkitPlatformBiome) biome.getPlatformBiome(); + NamespacedKey vanillaBukkitKey = platformBiome.getHandle().getKey(); + ResourceLocation vanillaMinecraftKey = new ResourceLocation(vanillaBukkitKey.getNamespace(), vanillaBukkitKey.getKey()); + Biome platform = NMSBiomeInjector.createBiome( + biome, + biomeRegistry.get(vanillaMinecraftKey) // get + ); + + ResourceKey delegateKey = ResourceKey.create(Registry.BIOME_REGISTRY, new ResourceLocation("terra", NMSBiomeInjector.createBiomeID(pack, key))); + + BuiltinRegistries.register(BuiltinRegistries.BIOME, delegateKey, platform); + biomeRegistry.register(delegateKey, platform, Lifecycle.stable()); + platformBiome.getContext().put(new NMSBiomeInfo(delegateKey)); + + terraBiomeMap.computeIfAbsent(vanillaMinecraftKey, i -> new ArrayList<>()).add(delegateKey.location()); + + LOGGER.debug("Registered biome: " + delegateKey); + } catch(NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) { + throw new RuntimeException(e); + } + })); + + Reflection.MAPPED_REGISTRY.setFrozen((MappedRegistry) biomeRegistry, true); // freeze registry again :) + + LOGGER.info("Doing tag garbage...."); + Map, List>> collect = biomeRegistry + .getTags() // streamKeysAndEntries + .collect(HashMap::new, + (map, pair) -> + map.put(pair.getFirst(), new ArrayList<>(pair.getSecond().stream().toList())), + HashMap::putAll); + + terraBiomeMap + .forEach((vb, terraBiomes) -> + NMSBiomeInjector.getEntry(biomeRegistry, vb) + .ifPresentOrElse( + vanilla -> terraBiomes + .forEach(tb -> NMSBiomeInjector.getEntry(biomeRegistry, tb) + .ifPresentOrElse( + terra -> { + LOGGER.debug(vanilla.unwrapKey().orElseThrow().location() + + " (vanilla for " + + terra.unwrapKey().orElseThrow().location() + + ": " + + vanilla.tags().toList()); + + vanilla.tags() + .forEach( + tag -> collect + .computeIfAbsent(tag, + t -> new ArrayList<>()) + .add(terra)); + }, + () -> LOGGER.error( + "No such biome: {}", + tb))), + () -> LOGGER.error("No vanilla biome: {}", vb))); + + biomeRegistry.resetTags(); // clearTags + biomeRegistry.bindTags(ImmutableMap.copyOf(collect)); // populateTags + + } catch(SecurityException | IllegalArgumentException exception) { + throw new RuntimeException(exception); + } + } +} diff --git a/platforms/bukkit/nms/v1_18_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_18_R2/NMSBiomeInjector.java b/platforms/bukkit/nms/v1_18_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_18_R2/NMSBiomeInjector.java index 3c69226d8..bf42448b2 100644 --- a/platforms/bukkit/nms/v1_18_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_18_R2/NMSBiomeInjector.java +++ b/platforms/bukkit/nms/v1_18_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_18_R2/NMSBiomeInjector.java @@ -31,84 +31,6 @@ import com.dfsek.terra.registry.master.ConfigRegistry; public class NMSBiomeInjector { - private static final Logger LOGGER = LoggerFactory.getLogger(NMSBiomeInjector.class); - private static final Map> terraBiomeMap = new HashMap<>(); - - - public static void registerBiomes(ConfigRegistry configRegistry) { - try { - LOGGER.info("Hacking biome registry..."); - WritableRegistry biomeRegistry = (WritableRegistry) Registries.biomeRegistry(); - - Reflection.MAPPED_REGISTRY.setFrozen((MappedRegistry) biomeRegistry, false); - - configRegistry.forEach(pack -> pack.getRegistry(com.dfsek.terra.api.world.biome.Biome.class).forEach((key, biome) -> { - try { - BukkitPlatformBiome platformBiome = (BukkitPlatformBiome) biome.getPlatformBiome(); - NamespacedKey vanillaBukkitKey = platformBiome.getHandle().getKey(); - ResourceLocation vanillaMinecraftKey = new ResourceLocation(vanillaBukkitKey.getNamespace(), vanillaBukkitKey.getKey()); - Biome platform = createBiome( - biome, - biomeRegistry.get(vanillaMinecraftKey) // get - ); - - ResourceKey delegateKey = ResourceKey.create(Registry.BIOME_REGISTRY, new ResourceLocation("terra", createBiomeID(pack, key))); - - BuiltinRegistries.register(BuiltinRegistries.BIOME, delegateKey, platform); - biomeRegistry.register(delegateKey, platform, Lifecycle.stable()); - platformBiome.getContext().put(new NMSBiomeInfo(delegateKey)); - - terraBiomeMap.computeIfAbsent(vanillaMinecraftKey, i -> new ArrayList<>()).add(delegateKey.location()); - - LOGGER.debug("Registered biome: " + delegateKey); - } catch(NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) { - throw new RuntimeException(e); - } - })); - - Reflection.MAPPED_REGISTRY.setFrozen((MappedRegistry) biomeRegistry, true); // freeze registry again :) - - LOGGER.info("Doing tag garbage...."); - Map, List>> collect = biomeRegistry - .getTags() // streamKeysAndEntries - .collect(HashMap::new, - (map, pair) -> - map.put(pair.getFirst(), new ArrayList<>(pair.getSecond().stream().toList())), - HashMap::putAll); - - terraBiomeMap - .forEach((vb, terraBiomes) -> - getEntry(biomeRegistry, vb) - .ifPresentOrElse( - vanilla -> terraBiomes - .forEach(tb -> getEntry(biomeRegistry, tb) - .ifPresentOrElse( - terra -> { - LOGGER.debug(vanilla.unwrapKey().orElseThrow().location() + - " (vanilla for " + - terra.unwrapKey().orElseThrow().location() + - ": " + - vanilla.tags().toList()); - - vanilla.tags() - .forEach( - tag -> collect - .computeIfAbsent(tag, - t -> new ArrayList<>()) - .add(terra)); - }, - () -> LOGGER.error( - "No such biome: {}", - tb))), - () -> LOGGER.error("No vanilla biome: {}", vb))); - - biomeRegistry.resetTags(); // clearTags - biomeRegistry.bindTags(ImmutableMap.copyOf(collect)); // populateTags - - } catch(SecurityException | IllegalArgumentException exception) { - throw new RuntimeException(exception); - } - } public static Optional> getEntry(Registry registry, ResourceLocation identifier) { return registry.getOptional(identifier) @@ -116,7 +38,7 @@ public class NMSBiomeInjector { .map(registry::getOrCreateHolder); } - private static Biome createBiome(com.dfsek.terra.api.world.biome.Biome biome, Biome vanilla) + public static Biome createBiome(com.dfsek.terra.api.world.biome.Biome biome, Biome vanilla) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException { Biome.BiomeBuilder builder = new Biome.BiomeBuilder(); // Builder diff --git a/platforms/bukkit/nms/v1_18_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_18_R2/NMSInitializer.java b/platforms/bukkit/nms/v1_18_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_18_R2/NMSInitializer.java index 60c7e1c1d..f724b89f0 100644 --- a/platforms/bukkit/nms/v1_18_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_18_R2/NMSInitializer.java +++ b/platforms/bukkit/nms/v1_18_R2/src/main/java/com/dfsek/terra/bukkit/nms/v1_18_R2/NMSInitializer.java @@ -9,7 +9,7 @@ import com.dfsek.terra.bukkit.nms.Initializer; public class NMSInitializer implements Initializer { @Override public void initialize(PlatformImpl platform) { - NMSBiomeInjector.registerBiomes(platform.getRawConfigRegistry()); + AwfulBukkitHacks.registerBiomes(platform.getRawConfigRegistry()); Bukkit.getPluginManager().registerEvents(new NMSInjectListener(), platform.getPlugin()); } } diff --git a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/AwfulBukkitHacks.java b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/AwfulBukkitHacks.java new file mode 100644 index 000000000..bfda736e2 --- /dev/null +++ b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/AwfulBukkitHacks.java @@ -0,0 +1,102 @@ +package com.dfsek.terra.bukkit.nms.v1_19_R1; + +import com.dfsek.terra.bukkit.world.BukkitPlatformBiome; +import com.dfsek.terra.registry.master.ConfigRegistry; +import com.google.common.collect.ImmutableMap; +import com.mojang.serialization.Lifecycle; +import net.minecraft.core.Holder; +import net.minecraft.core.MappedRegistry; +import net.minecraft.core.Registry; +import net.minecraft.core.WritableRegistry; +import net.minecraft.data.BuiltinRegistries; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.TagKey; +import net.minecraft.world.level.biome.Biome; +import org.bukkit.NamespacedKey; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.*; + +public class AwfulBukkitHacks { + private static final Logger LOGGER = LoggerFactory.getLogger(AwfulBukkitHacks.class); + + private static final Map> terraBiomeMap = new HashMap<>(); + + public static void registerBiomes(ConfigRegistry configRegistry) { + try { + LOGGER.info("Hacking biome registry..."); + WritableRegistry biomeRegistry = (WritableRegistry) Registries.biomeRegistry(); + + Reflection.MAPPED_REGISTRY.setFrozen((MappedRegistry) biomeRegistry, false); + + configRegistry.forEach(pack -> pack.getRegistry(com.dfsek.terra.api.world.biome.Biome.class).forEach((key, biome) -> { + try { + BukkitPlatformBiome platformBiome = (BukkitPlatformBiome) biome.getPlatformBiome(); + NamespacedKey vanillaBukkitKey = platformBiome.getHandle().getKey(); + ResourceLocation vanillaMinecraftKey = new ResourceLocation(vanillaBukkitKey.getNamespace(), vanillaBukkitKey.getKey()); + Biome platform = NMSBiomeInjector.createBiome( + biome, + Objects.requireNonNull(biomeRegistry.get(vanillaMinecraftKey)) // get + ); + + ResourceKey delegateKey = ResourceKey.create(Registry.BIOME_REGISTRY, + new ResourceLocation("terra", NMSBiomeInjector.createBiomeID(pack, key))); + + BuiltinRegistries.register(BuiltinRegistries.BIOME, delegateKey, platform); + biomeRegistry.register(delegateKey, platform, Lifecycle.stable()); + platformBiome.getContext().put(new NMSBiomeInfo(delegateKey)); + + terraBiomeMap.computeIfAbsent(vanillaMinecraftKey, i -> new ArrayList<>()).add(delegateKey.location()); + + LOGGER.debug("Registered biome: " + delegateKey); + } catch(NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) { + throw new RuntimeException(e); + } + })); + + Reflection.MAPPED_REGISTRY.setFrozen((MappedRegistry) biomeRegistry, true); // freeze registry again :) + + LOGGER.info("Doing tag garbage...."); + Map, List>> collect = biomeRegistry + .getTags() // streamKeysAndEntries + .collect(HashMap::new, + (map, pair) -> + map.put(pair.getFirst(), new ArrayList<>(pair.getSecond().stream().toList())), + HashMap::putAll); + + terraBiomeMap + .forEach((vb, terraBiomes) -> + NMSBiomeInjector.getEntry(biomeRegistry, vb) + .ifPresentOrElse( + vanilla -> terraBiomes + .forEach(tb -> NMSBiomeInjector.getEntry(biomeRegistry, tb) + .ifPresentOrElse( + terra -> { + LOGGER.debug(vanilla.unwrapKey().orElseThrow().location() + + " (vanilla for " + + terra.unwrapKey().orElseThrow().location() + + ": " + + vanilla.tags().toList()); + + vanilla.tags() + .forEach( + tag -> collect + .computeIfAbsent(tag, + t -> new ArrayList<>()) + .add(terra)); + }, + () -> LOGGER.error( + "No such biome: {}", + tb))), + () -> LOGGER.error("No vanilla biome: {}", vb))); + + biomeRegistry.resetTags(); + biomeRegistry.bindTags(ImmutableMap.copyOf(collect)); + + } catch(SecurityException | IllegalArgumentException exception) { + throw new RuntimeException(exception); + } + } +} diff --git a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/NMSBiomeInjector.java b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/NMSBiomeInjector.java index fdf380e97..88f224f4b 100644 --- a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/NMSBiomeInjector.java +++ b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/NMSBiomeInjector.java @@ -31,93 +31,14 @@ import com.dfsek.terra.registry.master.ConfigRegistry; public class NMSBiomeInjector { - private static final Logger LOGGER = LoggerFactory.getLogger(NMSBiomeInjector.class); - private static final Map> terraBiomeMap = new HashMap<>(); - - - public static void registerBiomes(ConfigRegistry configRegistry) { - try { - LOGGER.info("Hacking biome registry..."); - WritableRegistry biomeRegistry = (WritableRegistry) Registries.biomeRegistry(); - - Reflection.MAPPED_REGISTRY.setFrozen((MappedRegistry) biomeRegistry, false); - - configRegistry.forEach(pack -> pack.getRegistry(com.dfsek.terra.api.world.biome.Biome.class).forEach((key, biome) -> { - try { - BukkitPlatformBiome platformBiome = (BukkitPlatformBiome) biome.getPlatformBiome(); - NamespacedKey vanillaBukkitKey = platformBiome.getHandle().getKey(); - ResourceLocation vanillaMinecraftKey = new ResourceLocation(vanillaBukkitKey.getNamespace(), vanillaBukkitKey.getKey()); - Biome platform = createBiome( - biome, - Objects.requireNonNull(biomeRegistry.get(vanillaMinecraftKey)) // get - ); - - ResourceKey delegateKey = ResourceKey.create(Registry.BIOME_REGISTRY, - new ResourceLocation("terra", createBiomeID(pack, key))); - - BuiltinRegistries.register(BuiltinRegistries.BIOME, delegateKey, platform); - biomeRegistry.register(delegateKey, platform, Lifecycle.stable()); - platformBiome.getContext().put(new NMSBiomeInfo(delegateKey)); - - terraBiomeMap.computeIfAbsent(vanillaMinecraftKey, i -> new ArrayList<>()).add(delegateKey.location()); - - LOGGER.debug("Registered biome: " + delegateKey); - } catch(NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) { - throw new RuntimeException(e); - } - })); - - Reflection.MAPPED_REGISTRY.setFrozen((MappedRegistry) biomeRegistry, true); // freeze registry again :) - - LOGGER.info("Doing tag garbage...."); - Map, List>> collect = biomeRegistry - .getTags() // streamKeysAndEntries - .collect(HashMap::new, - (map, pair) -> - map.put(pair.getFirst(), new ArrayList<>(pair.getSecond().stream().toList())), - HashMap::putAll); - - terraBiomeMap - .forEach((vb, terraBiomes) -> - getEntry(biomeRegistry, vb) - .ifPresentOrElse( - vanilla -> terraBiomes - .forEach(tb -> getEntry(biomeRegistry, tb) - .ifPresentOrElse( - terra -> { - LOGGER.debug(vanilla.unwrapKey().orElseThrow().location() + - " (vanilla for " + - terra.unwrapKey().orElseThrow().location() + - ": " + - vanilla.tags().toList()); - - vanilla.tags() - .forEach( - tag -> collect - .computeIfAbsent(tag, - t -> new ArrayList<>()) - .add(terra)); - }, - () -> LOGGER.error( - "No such biome: {}", - tb))), - () -> LOGGER.error("No vanilla biome: {}", vb))); - - biomeRegistry.resetTags(); - biomeRegistry.bindTags(ImmutableMap.copyOf(collect)); - - } catch(SecurityException | IllegalArgumentException exception) { - throw new RuntimeException(exception); - } - } - + public static Optional> getEntry(Registry registry, ResourceLocation identifier) { return registry.getOptional(identifier) .flatMap(registry::getResourceKey) .map(registry::getOrCreateHolderOrThrow); } - private static Biome createBiome(com.dfsek.terra.api.world.biome.Biome biome, Biome vanilla) + public static Biome createBiome(com.dfsek.terra.api.world.biome.Biome biome, Biome vanilla) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException { Biome.BiomeBuilder builder = new Biome.BiomeBuilder(); diff --git a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/NMSInitializer.java b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/NMSInitializer.java index 61efc587d..82a293cd1 100644 --- a/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/NMSInitializer.java +++ b/platforms/bukkit/nms/v1_19_R1/src/main/java/com/dfsek/terra/bukkit/nms/v1_19_R1/NMSInitializer.java @@ -9,7 +9,7 @@ import com.dfsek.terra.bukkit.nms.Initializer; public class NMSInitializer implements Initializer { @Override public void initialize(PlatformImpl platform) { - NMSBiomeInjector.registerBiomes(platform.getRawConfigRegistry()); + AwfulBukkitHacks.registerBiomes(platform.getRawConfigRegistry()); Bukkit.getPluginManager().registerEvents(new NMSInjectListener(), platform.getPlugin()); } } diff --git a/platforms/quilt/src/main/java/com/dfsek/terra/quilt/PreLaunchHacks.java b/platforms/quilt/src/main/java/com/dfsek/terra/quilt/AwfulQuiltHacks.java similarity index 95% rename from platforms/quilt/src/main/java/com/dfsek/terra/quilt/PreLaunchHacks.java rename to platforms/quilt/src/main/java/com/dfsek/terra/quilt/AwfulQuiltHacks.java index c9d42de36..7e3b7afcc 100644 --- a/platforms/quilt/src/main/java/com/dfsek/terra/quilt/PreLaunchHacks.java +++ b/platforms/quilt/src/main/java/com/dfsek/terra/quilt/AwfulQuiltHacks.java @@ -11,8 +11,8 @@ import java.net.URL; * * This will likely not work on Gson because FabricLoader has some special logic related to Gson. */ -public final class PreLaunchHacks { - private PreLaunchHacks() {} +public final class AwfulQuiltHacks { + private AwfulQuiltHacks() {} private static final ClassLoader KNOT_CLASSLOADER = Thread.currentThread().getContextClassLoader(); private static final Method ADD_URL_METHOD; diff --git a/platforms/quilt/src/main/java/com/dfsek/terra/quilt/QuiltPreLaunchEntryPoint.java b/platforms/quilt/src/main/java/com/dfsek/terra/quilt/QuiltPreLaunchEntryPoint.java index 1afb1ee4e..1e4fb70a9 100644 --- a/platforms/quilt/src/main/java/com/dfsek/terra/quilt/QuiltPreLaunchEntryPoint.java +++ b/platforms/quilt/src/main/java/com/dfsek/terra/quilt/QuiltPreLaunchEntryPoint.java @@ -13,7 +13,7 @@ public class QuiltPreLaunchEntryPoint implements PreLaunchEntrypoint { public void onPreLaunch(ModContainer mod) { if (QuiltLoader.isDevelopmentEnvironment()) { try { - PreLaunchHacks.hackilyLoadForMixin(BrigadierMappingBuilder.class.getName()); + AwfulQuiltHacks.hackilyLoadForMixin(BrigadierMappingBuilder.class.getName()); } catch(ClassNotFoundException | InvocationTargetException | IllegalAccessException e) { throw new RuntimeException(e); } From ef4a28fd23e5d0ceba0cbef4be25e0c5edd55d04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zo=C3=AB?= Date: Tue, 5 Jul 2022 02:24:25 -0700 Subject: [PATCH 14/14] Revert "remove dep because we shade" This reverts commit 19e46fbe4c246d3ba4328c5551c0bf135c7317cb. --- platforms/quilt/src/main/resources/quilt.mod.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/platforms/quilt/src/main/resources/quilt.mod.json b/platforms/quilt/src/main/resources/quilt.mod.json index 6ea8b960f..0f53988ec 100644 --- a/platforms/quilt/src/main/resources/quilt.mod.json +++ b/platforms/quilt/src/main/resources/quilt.mod.json @@ -40,6 +40,10 @@ { "id": "minecraft", "version": "1.19.x" + }, + { + "id": "quilted_fabric_api", + "versions": ">=2.0.0-" } ] },