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.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<org.spongepowered.asm.gradle.plugins.MixinExtension> {
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<JavaCompile>().all {
options.annotationProcessorPath = files()
}
}
}
afterEvaluate {
@ -61,6 +73,7 @@ configure<UserDevExtension> {
"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"])
}
@ -93,3 +106,17 @@ 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"
))
}
}

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.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<String, Integer> colors = template.getColors();
Map<String, Integer> 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()));

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