From 049a56fcb07cecf8efadaf8d4833ecdcfda2de9e Mon Sep 17 00:00:00 2001 From: dfsek Date: Sat, 1 May 2021 18:20:11 -0700 Subject: [PATCH] Mixin on Forge --- platforms/forge/build.gradle.kts | 31 ++++++++++- .../dfsek/terra/forge/TerraForgePlugin.java | 30 +++++------ .../forge/mixin/BiomeAmbienceAccessor.java | 51 +++++++++++++++++++ .../src/main/resources/terra.mixins.json | 15 ++++++ 4 files changed, 109 insertions(+), 18 deletions(-) create mode 100644 platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/BiomeAmbienceAccessor.java create mode 100644 platforms/forge/src/main/resources/terra.mixins.json diff --git a/platforms/forge/build.gradle.kts b/platforms/forge/build.gradle.kts index e4f2e255e..6585d3f61 100644 --- a/platforms/forge/build.gradle.kts +++ b/platforms/forge/build.gradle.kts @@ -1,9 +1,9 @@ import com.dfsek.terra.configureCommon -import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar import net.minecraftforge.gradle.common.util.RunConfig import net.minecraftforge.gradle.mcp.task.GenerateSRG import net.minecraftforge.gradle.userdev.UserDevExtension import net.minecraftforge.gradle.userdev.tasks.RenameJarInPlace +import java.util.Date buildscript { repositories { @@ -18,8 +18,11 @@ buildscript { } } apply(plugin = "net.minecraftforge.gradle") +apply(plugin = "org.spongepowered.mixin") - +configure { + add(sourceSets.main.orNull, "terra.refmap.json") +} plugins { java @@ -41,6 +44,15 @@ val mcVersion = "1.16.5" dependencies { "shadedApi"(project(":common")) "minecraft"("net.minecraftforge:forge:$mcVersion-$forgeVersion") + "annotationProcessor"("org.spongepowered:mixin:0.8.2:processor") +} + +if (System.getProperty("idea.sync.active") == "true") { + afterEvaluate { + tasks.withType().all { + options.annotationProcessorPath = files() + } + } } afterEvaluate { @@ -61,6 +73,7 @@ configure { "forge.logging.markers" to "SCAN,REGISTRIES,REGISTRYDUMP", "forge.logging.console.level" to "debug" )) + arg("-mixin.config=terra.mixins.json") workingDirectory = project.file("run").canonicalPath source(sourceSets["main"]) } @@ -92,4 +105,18 @@ val deobfElements = configurations.register("deobfElements") { val javaComponent = components["java"] as AdhocComponentWithVariants javaComponent.addVariantsFromConfiguration(deobfElements.get()) { mapToMavenScope("runtime") +} + +tasks.jar { + manifest { + attributes(mapOf( + "Specification-Title" to "terra", + "Specification-Vendor" to "Terra", + "Specification-Version" to "1.0", + "Implementation-Title" to "Terra", + "Implementation-Version" to project.version, + "Implementation-Vendor" to "terra", + "MixinConfigs" to "terra.mixins.json" + )) + } } \ No newline at end of file diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/TerraForgePlugin.java b/platforms/forge/src/main/java/com/dfsek/terra/forge/TerraForgePlugin.java index 2f40a4c67..d75bd8bd2 100644 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/TerraForgePlugin.java +++ b/platforms/forge/src/main/java/com/dfsek/terra/forge/TerraForgePlugin.java @@ -37,6 +37,7 @@ import com.dfsek.terra.config.lang.Language; import com.dfsek.terra.config.pack.ConfigPack; import com.dfsek.terra.config.templates.BiomeTemplate; import com.dfsek.terra.forge.inventory.ForgeItemHandle; +import com.dfsek.terra.forge.mixin.BiomeAmbienceAccessor; import com.dfsek.terra.forge.world.ForgeAdapter; import com.dfsek.terra.forge.world.ForgeBiome; import com.dfsek.terra.forge.world.ForgeTree; @@ -62,6 +63,7 @@ import net.minecraft.command.CommandSource; import net.minecraft.util.ResourceLocation; import net.minecraft.util.text.StringTextComponent; import net.minecraft.world.biome.Biome; +import net.minecraft.world.biome.BiomeAmbience; import net.minecraft.world.biome.BiomeGenerationSettings; import net.minecraft.world.gen.GenerationStage; import net.minecraft.world.gen.feature.ConfiguredFeature; @@ -214,7 +216,7 @@ public class TerraForgePlugin implements TerraPlugin { public Biome createBiome(BiomeBuilder biome) { BiomeTemplate template = biome.getTemplate(); - //Map colors = template.getColors(); + Map colors = template.getColors(); Biome vanilla = ((ForgeBiome) new ArrayList<>(biome.getVanillaBiomes().getContents()).get(0)).getHandle(); @@ -222,29 +224,26 @@ public class TerraForgePlugin implements TerraPlugin { generationSettings.surfaceBuilder(SurfaceBuilder.DEFAULT.configured(new SurfaceBuilderConfig(Blocks.GRASS_BLOCK.defaultBlockState(), Blocks.DIRT.defaultBlockState(), Blocks.GRAVEL.defaultBlockState()))); // It needs a surfacebuilder, even though we dont use it. generationSettings.addFeature(GenerationStage.Decoration.VEGETAL_DECORATION, POPULATOR_CONFIGURED_FEATURE); - - /* + BiomeAmbienceAccessor accessor = ((BiomeAmbienceAccessor) vanilla.getSpecialEffects()); BiomeAmbience.Builder effects = new BiomeAmbience.Builder() - .waterColor(colors.getOrDefault("water", vanilla.getSpecialEffects().waterColor)) - .waterFogColor(colors.getOrDefault("water-fog", vanilla.getSpecialEffects().waterFogColor)) - .fogColor(colors.getOrDefault("fog", vanilla.getSpecialEffects().fogColor)) - .skyColor(colors.getOrDefault("sky", vanilla.getSpecialEffects().skyColor)) - .grassColorModifier(vanilla.getSpecialEffects().grassColorModifier); + .waterColor(colors.getOrDefault("water", accessor.getWaterColor())) + .waterFogColor(colors.getOrDefault("water-fog", accessor.getWaterFogColor())) + .fogColor(colors.getOrDefault("fog", accessor.getFogColor())) + .skyColor(colors.getOrDefault("sky", accessor.getSkyColor())) + .grassColorModifier(accessor.getGrassColorModifier()); if(colors.containsKey("grass")) { effects.grassColorOverride(colors.get("grass")); } else { - vanilla.getSpecialEffects().grassColor.ifPresent(effects::grassColor); + accessor.getGrassColorOverride().ifPresent(effects::grassColorOverride); } - vanilla.getEffects().foliageColor.ifPresent(effects::foliageColor); + accessor.getFoliageColorOverride().ifPresent(effects::foliageColorOverride); if(colors.containsKey("foliage")) { - effects.foliageColor(colors.get("foliage")); + effects.foliageColorOverride(colors.get("foliage")); } else { - vanilla.getEffects().foliageColor.ifPresent(effects::foliageColor); + accessor.getFoliageColorOverride().ifPresent(effects::foliageColorOverride); } - */ - return new Biome.Builder() .precipitation(vanilla.getPrecipitation()) .biomeCategory(vanilla.getBiomeCategory()) @@ -252,8 +251,7 @@ public class TerraForgePlugin implements TerraPlugin { .scale(vanilla.getScale()) .temperature(vanilla.getBaseTemperature()) .downfall(vanilla.getDownfall()) - //.specialEffects(effects.build()) - .specialEffects(vanilla.getSpecialEffects()) + .specialEffects(effects.build()) .mobSpawnSettings(vanilla.getMobSettings()) .generationSettings(generationSettings.build()) .build().setRegistryName("terra", createBiomeID(template.getPack(), template.getID())); diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/BiomeAmbienceAccessor.java b/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/BiomeAmbienceAccessor.java new file mode 100644 index 000000000..bfbe7baa3 --- /dev/null +++ b/platforms/forge/src/main/java/com/dfsek/terra/forge/mixin/BiomeAmbienceAccessor.java @@ -0,0 +1,51 @@ +package com.dfsek.terra.forge.mixin; + +import net.minecraft.client.audio.BackgroundMusicSelector; +import net.minecraft.util.SoundEvent; +import net.minecraft.world.biome.BiomeAmbience; +import net.minecraft.world.biome.MoodSoundAmbience; +import net.minecraft.world.biome.ParticleEffectAmbience; +import net.minecraft.world.biome.SoundAdditionsAmbience; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +import java.util.Optional; + +@Mixin(BiomeAmbience.class) +public interface BiomeAmbienceAccessor { + @Accessor + int getFogColor(); + + @Accessor + int getWaterColor(); + + @Accessor + int getWaterFogColor(); + + @Accessor + int getSkyColor(); + + @Accessor + Optional getFoliageColorOverride(); + + @Accessor + Optional getGrassColorOverride(); + + @Accessor + BiomeAmbience.GrassColorModifier getGrassColorModifier(); + + @Accessor + Optional getAmbientParticleSettings(); + + @Accessor + Optional getAmbientLoopSoundEvent(); + + @Accessor + Optional getAmbientMoodSettings(); + + @Accessor + Optional getAmbientAdditionsSettings(); + + @Accessor + Optional getBackgroundMusic(); +} diff --git a/platforms/forge/src/main/resources/terra.mixins.json b/platforms/forge/src/main/resources/terra.mixins.json new file mode 100644 index 000000000..06f3b15ec --- /dev/null +++ b/platforms/forge/src/main/resources/terra.mixins.json @@ -0,0 +1,15 @@ +{ + "required": true, + "package": "com.dfsek.terra.forge.mixin", + "compatibilityLevel": "JAVA_8", + "refmap": "terra.refmap.json", + "mixins": [ + "BiomeAmbienceAccessor" + ], + "client": [ + ], + "injectors": { + "defaultRequire": 1 + }, + "minVersion": "0.8" +} \ No newline at end of file