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

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