Spawning!

This commit is contained in:
Zoë
2022-06-26 23:43:15 -07:00
parent b0bf9d042e
commit 71aa42011f
21 changed files with 249 additions and 35 deletions

View File

@@ -1,5 +1,5 @@
# Magic options for more perf
org.gradle.jvmargs=-Xmx2048M -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 -XX:+UseParallelGC
org.gradle.jvmargs=-Xmx3048M -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 -XX:+UseParallelGC
org.gradle.vfs.watch=true
kapt.use.worker.api=true
kapt.include.compile.classpath=false

View File

@@ -36,7 +36,7 @@ dependencies {
}
loom {
accessWidenerPath.set(file("src/main/resources/terra.accesswidener"))
accessWidenerPath.set(project(":platforms:mixin-common").file("src/main/resources/terra.accesswidener"))
mixin {
defaultRefmapName.set("terra-fabric-refmap.json")
}

View File

@@ -1,23 +1,20 @@
package com.dfsek.terra.fabric.util;
import com.dfsek.terra.api.config.ConfigPack;
import com.dfsek.terra.api.world.biome.Biome;
import com.dfsek.terra.fabric.FabricEntryPoint;
import com.dfsek.terra.mod.config.PreLoadCompatibilityOptions;
import com.dfsek.terra.mod.config.ProtoPlatformBiome;
import com.dfsek.terra.mod.mixin_ifaces.FloraFeatureHolder;
import com.dfsek.terra.mod.util.MinecraftUtil;
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.world.gen.feature.ConfiguredFeature;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.*;
import java.util.ArrayList;
import com.dfsek.terra.api.config.ConfigPack;
import com.dfsek.terra.api.world.biome.Biome;
import com.dfsek.terra.fabric.FabricEntryPoint;
import com.dfsek.terra.mod.config.PreLoadCompatibilityOptions;
import com.dfsek.terra.mod.config.ProtoPlatformBiome;
import com.dfsek.terra.mod.util.MinecraftUtil;
public final class BiomeUtil {

View File

@@ -1 +0,0 @@
accessWidener v1 named

View File

@@ -32,11 +32,13 @@ dependencies {
}
loom {
accessWidenerPath.set(project(":platforms:mixin-common").file("src/main/resources/terra.accesswidener"))
mixin {
defaultRefmapName.set("terra-forge-refmap.json")
}
forge {
convertAccessWideners.set(true)
mixinConfig("terra.common.mixins.json")
mixinConfig("terra.forge.mixins.json")
}

View File

@@ -7,6 +7,7 @@ loom {
mixin {
defaultRefmapName.set("terra-common-refmap.json")
}
accessWidenerPath.set(file("src/main/resources/terra.accesswidener"))
}
dependencies {

View File

@@ -4,13 +4,10 @@ import com.dfsek.tectonic.api.TypeRegistry;
import com.dfsek.tectonic.api.depth.DepthTracker;
import com.dfsek.tectonic.api.exception.LoadException;
import com.dfsek.terra.mod.config.BiomeAdditionsSoundTemplate;
import com.dfsek.terra.mod.config.BiomeMoodSoundTemplate;
import com.dfsek.terra.mod.config.BiomeParticleConfigTemplate;
import com.dfsek.terra.mod.config.MusicSoundTemplate;
import com.dfsek.terra.mod.config.SoundEventTemplate;
import com.dfsek.terra.mod.config.SpawnSettingsTemplate;
import net.minecraft.entity.EntityType;
import net.minecraft.entity.SpawnGroup;
import net.minecraft.server.MinecraftServer;
import net.minecraft.sound.BiomeAdditionsSound;
import net.minecraft.sound.BiomeMoodSound;
@@ -22,6 +19,8 @@ import net.minecraft.world.biome.Biome.Precipitation;
import net.minecraft.world.biome.Biome.TemperatureModifier;
import net.minecraft.world.biome.BiomeEffects.GrassColorModifier;
import net.minecraft.world.biome.BiomeParticleConfig;
import net.minecraft.world.biome.SpawnSettings;
import net.minecraft.world.biome.SpawnSettings.SpawnEntry;
import net.minecraft.world.gen.WorldPreset;
import java.util.List;
@@ -31,7 +30,17 @@ import java.util.function.BiConsumer;
import com.dfsek.terra.AbstractPlatform;
import com.dfsek.terra.api.addon.BaseAddon;
import com.dfsek.terra.api.world.biome.PlatformBiome;
import com.dfsek.terra.mod.config.BiomeAdditionsSoundTemplate;
import com.dfsek.terra.mod.config.BiomeMoodSoundTemplate;
import com.dfsek.terra.mod.config.BiomeParticleConfigTemplate;
import com.dfsek.terra.mod.config.EntityTypeTemplate;
import com.dfsek.terra.mod.config.MusicSoundTemplate;
import com.dfsek.terra.mod.config.ProtoPlatformBiome;
import com.dfsek.terra.mod.config.SoundEventTemplate;
import com.dfsek.terra.mod.config.SpawnCostConfig;
import com.dfsek.terra.mod.config.SpawnEntryTemplate;
import com.dfsek.terra.mod.config.SpawnGroupTemplate;
import com.dfsek.terra.mod.config.SpawnTypeConfig;
import com.dfsek.terra.mod.util.PresetUtil;
@@ -63,7 +72,13 @@ public abstract class ModPlatform extends AbstractPlatform {
.registerLoader(SoundEvent.class, SoundEventTemplate::new)
.registerLoader(BiomeMoodSound.class, BiomeMoodSoundTemplate::new)
.registerLoader(BiomeAdditionsSound.class, BiomeAdditionsSoundTemplate::new)
.registerLoader(MusicSound.class, MusicSoundTemplate::new);
.registerLoader(MusicSound.class, MusicSoundTemplate::new)
.registerLoader(EntityType.class, EntityTypeTemplate::new)
.registerLoader(SpawnCostConfig.class, SpawnCostConfig::new)
.registerLoader(SpawnEntry.class, SpawnEntryTemplate::new)
.registerLoader(SpawnGroup.class, SpawnGroupTemplate::new)
.registerLoader(SpawnTypeConfig.class, SpawnTypeConfig::new)
.registerLoader(SpawnSettings.class, SpawnSettingsTemplate::new);
}
private ProtoPlatformBiome parseBiome(String id, DepthTracker tracker) throws LoadException {

View File

@@ -12,7 +12,7 @@ public class BiomeAdditionsSoundTemplate implements ObjectTemplate<BiomeAddition
@Default
private SoundEvent sound = null;
@Value("sound")
@Value("sound-chance")
@Default
private Double soundChance = null;

View File

@@ -16,16 +16,16 @@ public class BiomeParticleConfigTemplate implements ObjectTemplate<BiomeParticle
@Value("probability")
@Default
private Integer particleProbability = null;
private Integer probability = null;
@Override
public BiomeParticleConfig get() {
if (particle == null || particleProbability == null) {
if (particle == null || probability == null) {
return null;
}
try {
return new BiomeParticleConfig(ParticleEffectArgumentType.readParameters(new StringReader(particle)), particleProbability);
return new BiomeParticleConfig(ParticleEffectArgumentType.readParameters(new StringReader(particle)), probability);
} catch(CommandSyntaxException e) {
throw new RuntimeException(e);
}

View File

@@ -0,0 +1,20 @@
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;
public class EntityTypeTemplate implements ObjectTemplate<EntityType<?>> {
@Value("id")
@Default
private Identifier id = null;
@Override
public EntityType<?> get() {
return Registry.ENTITY_TYPE.get(id);
}
}

View File

@@ -20,7 +20,7 @@ public class MusicSoundTemplate implements ObjectTemplate<MusicSound> {
@Default
private Integer maxDelay = null;
@Value("-current-music")
@Value("replace-current-music")
@Default
private Boolean replaceCurrentMusic = null;

View File

@@ -12,7 +12,7 @@ public class SoundEventTemplate implements ObjectTemplate<SoundEvent> {
@Default
private Identifier id = null;
@Value("distanceToTravel")
@Value("distance-to-travel")
@Default
private Float distanceToTravel = null;

View File

@@ -0,0 +1,38 @@
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;
public class SpawnCostConfig implements ObjectTemplate<SpawnCostConfig> {
@Value("type")
@Default
private EntityType<?> type = null;
@Value("mass")
@Default
private Double mass = null;
@Value("gravity")
@Default
private Double gravity = null;
public EntityType<?> getType() {
return type;
}
public Double getMass() {
return mass;
}
public Double getGravity() {
return gravity;
}
@Override
public SpawnCostConfig get() {
return this;
}
}

View File

@@ -0,0 +1,31 @@
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.world.biome.SpawnSettings.SpawnEntry;
public class SpawnEntryTemplate implements ObjectTemplate<SpawnEntry> {
@Value("type")
@Default
private EntityType<?> type = null;
@Value("weight")
@Default
private Integer weight = null;
@Value("min-group-size")
@Default
private Integer minGroupSize = null;
@Value("max-group-size")
@Default
private Integer maxGroupSize = null;
@Override
public SpawnEntry get() {
return new SpawnEntry(type, weight, minGroupSize, maxGroupSize);
}
}

View File

@@ -0,0 +1,18 @@
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.SpawnGroup;
public class SpawnGroupTemplate implements ObjectTemplate<SpawnGroup> {
@Value("group")
@Default
private String group = null;
@Override
public SpawnGroup get() {
return SpawnGroup.valueOf(group);
}
}

View File

@@ -0,0 +1,39 @@
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.world.biome.SpawnSettings;
import java.util.List;
public class SpawnSettingsTemplate implements ObjectTemplate<SpawnSettings> {
@Value("spawns")
@Default
private List<SpawnTypeConfig> spawns = null;
@Value("costs")
@Default
private List<SpawnCostConfig> costs = null;
@Value("probability")
@Default
private Float probability = null;
@Override
public SpawnSettings get() {
SpawnSettings.Builder builder = new SpawnSettings.Builder();
for (SpawnTypeConfig spawn : spawns) {
builder.spawn(spawn.getGroup(), spawn.getEntry());
}
for (SpawnCostConfig cost: costs) {
builder.spawnCost(cost.getType(), cost.getMass(), cost.getGravity());
}
if (probability != null) {
builder.creatureSpawnProbability(probability);
}
return builder.build();
}
}

View File

@@ -0,0 +1,31 @@
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.SpawnGroup;
import net.minecraft.world.biome.SpawnSettings.SpawnEntry;
public class SpawnTypeConfig implements ObjectTemplate<SpawnTypeConfig> {
@Value("group")
@Default
private SpawnGroup group = null;
@Value("entry")
@Default
private SpawnEntry entry = null;
public SpawnGroup getGroup() {
return group;
}
public SpawnEntry getEntry() {
return entry;
}
@Override
public SpawnTypeConfig get() {
return this;
}
}

View File

@@ -11,6 +11,7 @@ import net.minecraft.world.biome.Biome.Precipitation;
import net.minecraft.world.biome.Biome.TemperatureModifier;
import net.minecraft.world.biome.BiomeEffects.GrassColorModifier;
import net.minecraft.world.biome.BiomeParticleConfig;
import net.minecraft.world.biome.SpawnSettings;
import com.dfsek.terra.api.properties.Properties;
@@ -42,7 +43,7 @@ public class VanillaBiomeProperties implements ConfigTemplate, Properties {
@Value("colors.modifier")
@Default
private GrassColorModifier modifier = null;
private GrassColorModifier grassColorModifier = null;
@Value("particles")
@Default
@@ -80,6 +81,10 @@ public class VanillaBiomeProperties implements ConfigTemplate, Properties {
@Default
private MusicSound music = null;
@Value("spawning")
@Default
private SpawnSettings spawnSettings = null;
public Integer getGrassColor() {
return grassColor;
}
@@ -105,7 +110,7 @@ public class VanillaBiomeProperties implements ConfigTemplate, Properties {
}
public GrassColorModifier getGrassColorModifier() {
return modifier;
return grassColorModifier;
}
public BiomeParticleConfig getParticleConfig() {
@@ -143,4 +148,8 @@ public class VanillaBiomeProperties implements ConfigTemplate, Properties {
public MusicSound getMusic() {
return music;
}
public SpawnSettings getSpawnSettings() {
return spawnSettings;
}
}

View File

@@ -0,0 +1,12 @@
package com.dfsek.terra.mod.mixin.access;
import net.minecraft.world.biome.Biome;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;
@Mixin(Biome.class)
public interface BiomeAccessor {
@Accessor("weather")
Biome.Weather getWeather();
}

View File

@@ -30,6 +30,7 @@ import com.dfsek.terra.api.block.entity.MobSpawner;
import com.dfsek.terra.api.block.entity.Sign;
import com.dfsek.terra.api.config.ConfigPack;
import com.dfsek.terra.mod.config.VanillaBiomeProperties;
import com.dfsek.terra.mod.mixin.access.BiomeAccessor;
import com.dfsek.terra.mod.mixin_ifaces.FloraFeatureHolder;
@@ -151,14 +152,13 @@ public final class MinecraftUtil {
builder.temperature(Objects.requireNonNullElse(vanillaBiomeProperties.getTemperature(), vanilla.getTemperature()));
builder.downfall(Objects.requireNonNullElse(vanillaBiomeProperties.getDownfall(), vanilla.getDownfall()));
if (vanillaBiomeProperties.getTemperatureModifier() != null) {
builder.temperatureModifier(vanillaBiomeProperties.getTemperatureModifier());
}
builder.temperatureModifier(Objects.requireNonNullElse(vanillaBiomeProperties.getTemperatureModifier(), ((BiomeAccessor)((Object)vanilla)).getWeather().temperatureModifier()));
builder.spawnSettings(Objects.requireNonNullElse(vanillaBiomeProperties.getSpawnSettings(), vanilla.getSpawnSettings()));
return builder
.effects(effects.build())
.spawnSettings(vanilla.getSpawnSettings())
.generationSettings(generationSettings.build())
.build();
}

View File

@@ -0,0 +1,2 @@
accessWidener v1 named
accessible class net/minecraft/world/biome/Biome$Weather