Mixin on Forge

This commit is contained in:
dfsek 2021-05-01 18:20:11 -07:00
parent 762b248641
commit 049a56fcb0
4 changed files with 109 additions and 18 deletions

View File

@ -1,9 +1,9 @@
import com.dfsek.terra.configureCommon 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.common.util.RunConfig
import net.minecraftforge.gradle.mcp.task.GenerateSRG import net.minecraftforge.gradle.mcp.task.GenerateSRG
import net.minecraftforge.gradle.userdev.UserDevExtension import net.minecraftforge.gradle.userdev.UserDevExtension
import net.minecraftforge.gradle.userdev.tasks.RenameJarInPlace import net.minecraftforge.gradle.userdev.tasks.RenameJarInPlace
import java.util.Date
buildscript { buildscript {
repositories { repositories {
@ -18,8 +18,11 @@ buildscript {
} }
} }
apply(plugin = "net.minecraftforge.gradle") apply(plugin = "net.minecraftforge.gradle")
apply(plugin = "org.spongepowered.mixin")
configure<org.spongepowered.asm.gradle.plugins.MixinExtension> {
add(sourceSets.main.orNull, "terra.refmap.json")
}
plugins { plugins {
java java
@ -41,6 +44,15 @@ val mcVersion = "1.16.5"
dependencies { dependencies {
"shadedApi"(project(":common")) "shadedApi"(project(":common"))
"minecraft"("net.minecraftforge:forge:$mcVersion-$forgeVersion") "minecraft"("net.minecraftforge:forge:$mcVersion-$forgeVersion")
"annotationProcessor"("org.spongepowered:mixin:0.8.2:processor")
}
if (System.getProperty("idea.sync.active") == "true") {
afterEvaluate {
tasks.withType<JavaCompile>().all {
options.annotationProcessorPath = files()
}
}
} }
afterEvaluate { afterEvaluate {
@ -61,6 +73,7 @@ configure<UserDevExtension> {
"forge.logging.markers" to "SCAN,REGISTRIES,REGISTRYDUMP", "forge.logging.markers" to "SCAN,REGISTRIES,REGISTRYDUMP",
"forge.logging.console.level" to "debug" "forge.logging.console.level" to "debug"
)) ))
arg("-mixin.config=terra.mixins.json")
workingDirectory = project.file("run").canonicalPath workingDirectory = project.file("run").canonicalPath
source(sourceSets["main"]) source(sourceSets["main"])
} }
@ -92,4 +105,18 @@ val deobfElements = configurations.register("deobfElements") {
val javaComponent = components["java"] as AdhocComponentWithVariants val javaComponent = components["java"] as AdhocComponentWithVariants
javaComponent.addVariantsFromConfiguration(deobfElements.get()) { javaComponent.addVariantsFromConfiguration(deobfElements.get()) {
mapToMavenScope("runtime") 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"
))
}
} }

View File

@ -37,6 +37,7 @@ import com.dfsek.terra.config.lang.Language;
import com.dfsek.terra.config.pack.ConfigPack; import com.dfsek.terra.config.pack.ConfigPack;
import com.dfsek.terra.config.templates.BiomeTemplate; import com.dfsek.terra.config.templates.BiomeTemplate;
import com.dfsek.terra.forge.inventory.ForgeItemHandle; 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.ForgeAdapter;
import com.dfsek.terra.forge.world.ForgeBiome; import com.dfsek.terra.forge.world.ForgeBiome;
import com.dfsek.terra.forge.world.ForgeTree; 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.ResourceLocation;
import net.minecraft.util.text.StringTextComponent; import net.minecraft.util.text.StringTextComponent;
import net.minecraft.world.biome.Biome; import net.minecraft.world.biome.Biome;
import net.minecraft.world.biome.BiomeAmbience;
import net.minecraft.world.biome.BiomeGenerationSettings; import net.minecraft.world.biome.BiomeGenerationSettings;
import net.minecraft.world.gen.GenerationStage; import net.minecraft.world.gen.GenerationStage;
import net.minecraft.world.gen.feature.ConfiguredFeature; import net.minecraft.world.gen.feature.ConfiguredFeature;
@ -214,7 +216,7 @@ public class TerraForgePlugin implements TerraPlugin {
public Biome createBiome(BiomeBuilder biome) { public Biome createBiome(BiomeBuilder biome) {
BiomeTemplate template = biome.getTemplate(); BiomeTemplate template = biome.getTemplate();
//Map<String, Integer> colors = template.getColors(); Map<String, Integer> colors = template.getColors();
Biome vanilla = ((ForgeBiome) new ArrayList<>(biome.getVanillaBiomes().getContents()).get(0)).getHandle(); 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.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); generationSettings.addFeature(GenerationStage.Decoration.VEGETAL_DECORATION, POPULATOR_CONFIGURED_FEATURE);
BiomeAmbienceAccessor accessor = ((BiomeAmbienceAccessor) vanilla.getSpecialEffects());
/*
BiomeAmbience.Builder effects = new BiomeAmbience.Builder() BiomeAmbience.Builder effects = new BiomeAmbience.Builder()
.waterColor(colors.getOrDefault("water", vanilla.getSpecialEffects().waterColor)) .waterColor(colors.getOrDefault("water", accessor.getWaterColor()))
.waterFogColor(colors.getOrDefault("water-fog", vanilla.getSpecialEffects().waterFogColor)) .waterFogColor(colors.getOrDefault("water-fog", accessor.getWaterFogColor()))
.fogColor(colors.getOrDefault("fog", vanilla.getSpecialEffects().fogColor)) .fogColor(colors.getOrDefault("fog", accessor.getFogColor()))
.skyColor(colors.getOrDefault("sky", vanilla.getSpecialEffects().skyColor)) .skyColor(colors.getOrDefault("sky", accessor.getSkyColor()))
.grassColorModifier(vanilla.getSpecialEffects().grassColorModifier); .grassColorModifier(accessor.getGrassColorModifier());
if(colors.containsKey("grass")) { if(colors.containsKey("grass")) {
effects.grassColorOverride(colors.get("grass")); effects.grassColorOverride(colors.get("grass"));
} else { } 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")) { if(colors.containsKey("foliage")) {
effects.foliageColor(colors.get("foliage")); effects.foliageColorOverride(colors.get("foliage"));
} else { } else {
vanilla.getEffects().foliageColor.ifPresent(effects::foliageColor); accessor.getFoliageColorOverride().ifPresent(effects::foliageColorOverride);
} }
*/
return new Biome.Builder() return new Biome.Builder()
.precipitation(vanilla.getPrecipitation()) .precipitation(vanilla.getPrecipitation())
.biomeCategory(vanilla.getBiomeCategory()) .biomeCategory(vanilla.getBiomeCategory())
@ -252,8 +251,7 @@ public class TerraForgePlugin implements TerraPlugin {
.scale(vanilla.getScale()) .scale(vanilla.getScale())
.temperature(vanilla.getBaseTemperature()) .temperature(vanilla.getBaseTemperature())
.downfall(vanilla.getDownfall()) .downfall(vanilla.getDownfall())
//.specialEffects(effects.build()) .specialEffects(effects.build())
.specialEffects(vanilla.getSpecialEffects())
.mobSpawnSettings(vanilla.getMobSettings()) .mobSpawnSettings(vanilla.getMobSettings())
.generationSettings(generationSettings.build()) .generationSettings(generationSettings.build())
.build().setRegistryName("terra", createBiomeID(template.getPack(), template.getID())); .build().setRegistryName("terra", createBiomeID(template.getPack(), template.getID()));

View File

@ -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<Integer> getFoliageColorOverride();
@Accessor
Optional<Integer> getGrassColorOverride();
@Accessor
BiomeAmbience.GrassColorModifier getGrassColorModifier();
@Accessor
Optional<ParticleEffectAmbience> getAmbientParticleSettings();
@Accessor
Optional<SoundEvent> getAmbientLoopSoundEvent();
@Accessor
Optional<MoodSoundAmbience> getAmbientMoodSettings();
@Accessor
Optional<SoundAdditionsAmbience> getAmbientAdditionsSettings();
@Accessor
Optional<BackgroundMusicSelector> getBackgroundMusic();
}

View File

@ -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"
}