feat: worldtype generator
This commit is contained in:
parent
02c79c5f0b
commit
436014999c
5 changed files with 144 additions and 3 deletions
src/main
|
@ -34,6 +34,7 @@ import dev.tilera.cwg.options.OptionRegistry;
|
|||
import dev.tilera.cwg.proxy.CommonProxy;
|
||||
import dev.tilera.cwg.vanilla.SingleBiomeChunkManagerFactory;
|
||||
import dev.tilera.cwg.vanilla.VanillaChunkManagerFactory;
|
||||
import dev.tilera.cwg.worldtypes.WorldtypeChunkManagerFactory;
|
||||
import net.minecraft.world.biome.BiomeGenBase;
|
||||
import net.minecraft.world.gen.NoiseGenerator;
|
||||
import net.minecraft.world.gen.NoiseGeneratorOctaves;
|
||||
|
@ -93,7 +94,7 @@ public class ClassicWorldgen {
|
|||
CwgGlobals.getOptionRegistry().registerOption(new BooleanOption("cwg:disable_jungle_melons", "Disable Jungle Melons", false));
|
||||
CwgGlobals.getOptionRegistry().registerOption(new BooleanOption("cwg:disable_new_flowers", "Disable new Flowers", false));
|
||||
CwgGlobals.getOptionRegistry().registerOption(new BooleanOption("cwg:disable_tall_flowers", "Disable Tall Flowers", false));
|
||||
CwgGlobals.getOptionRegistry().registerOption(new StringOption("cwg:dimensions:name", "Dimension Name", "Custom Dimension", true));
|
||||
CwgGlobals.getOptionRegistry().registerOption(new StringOption("cwg:dimensions:name", "Dimension Name", "Custom Dimension", true, false));
|
||||
CwgGlobals.getOptionRegistry().registerOption(new IntOption("cwg:dimensions:provider", "Provider ID", Config.dimensionProviderID, true, false));
|
||||
CwgGlobals.getOptionRegistry().registerOption(new IntOption("cwg:generator.singleBiome:biomeID", "Biome ID", 0, false, true));
|
||||
}
|
||||
|
@ -119,6 +120,7 @@ public class ClassicWorldgen {
|
|||
CwgGlobals.getGeneratorRegistry().registerChunkManager(new ClassicChunkManagerFactory());
|
||||
CwgGlobals.getGeneratorRegistry().registerChunkManager(new SingleBiomeChunkManagerFactory());
|
||||
CwgGlobals.getGeneratorRegistry().registerChunkManager(new InfdevChunkManagerFactory());
|
||||
CwgGlobals.getGeneratorRegistry().registerChunkManager(new WorldtypeChunkManagerFactory());
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
|
|
|
@ -10,6 +10,7 @@ public class StringOption implements IOption<String> {
|
|||
private String displayName;
|
||||
private String defaultValue;
|
||||
private boolean isInternal = false;
|
||||
private boolean generatorSpecific = false;
|
||||
|
||||
public StringOption(String id, String displayName, String defaultValue) {
|
||||
this.id = id;
|
||||
|
@ -17,9 +18,10 @@ public class StringOption implements IOption<String> {
|
|||
this.defaultValue = defaultValue;
|
||||
}
|
||||
|
||||
public StringOption(String id, String displayName, String defaultValue, boolean isInternal) {
|
||||
public StringOption(String id, String displayName, String defaultValue, boolean isInternal, boolean generatorSpecific) {
|
||||
this(id, displayName, defaultValue);
|
||||
this.isInternal = isInternal;
|
||||
this.generatorSpecific = generatorSpecific;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -67,5 +69,10 @@ public class StringOption implements IOption<String> {
|
|||
return isInternal ? Type.INTERNAL : Type.STRING;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isGeneratorSpecific() {
|
||||
return generatorSpecific;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
66
src/main/java/dev/tilera/cwg/worldtypes/WorldTypeOption.java
Normal file
66
src/main/java/dev/tilera/cwg/worldtypes/WorldTypeOption.java
Normal file
|
@ -0,0 +1,66 @@
|
|||
package dev.tilera.cwg.worldtypes;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import dev.tilera.cwg.api.options.IOption;
|
||||
import net.minecraft.world.WorldType;
|
||||
|
||||
public class WorldTypeOption implements IOption<WorldType> {
|
||||
|
||||
@Override
|
||||
public WorldType getDefault() {
|
||||
return WorldType.DEFAULT;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getID() {
|
||||
return "cwg:generator.worldtype:worldtype";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getVisableName() {
|
||||
return "World Type";
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<WorldType> getType() {
|
||||
return WorldType.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Type getOptionType() {
|
||||
return Type.ENUM;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<WorldType, String> getPossibleValues() {
|
||||
Map<WorldType, String> map = new HashMap<>();
|
||||
for (WorldType t : WorldType.worldTypes) {
|
||||
if (t == null) continue;
|
||||
map.put(t, t.getWorldTypeName());
|
||||
}
|
||||
return map;
|
||||
}
|
||||
|
||||
@Override
|
||||
public WorldType decodeString(String input) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public WorldType fromRepresentation(String repr) {
|
||||
return WorldType.parseWorldType(repr);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toRepresentation(WorldType obj) {
|
||||
return obj.getWorldTypeName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isGeneratorSpecific() {
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,64 @@
|
|||
package dev.tilera.cwg.worldtypes;
|
||||
|
||||
import dev.tilera.cwg.DelegateChunkManager;
|
||||
import dev.tilera.cwg.api.CwgGlobals;
|
||||
import dev.tilera.cwg.api.generator.AbstractChunkManager;
|
||||
import dev.tilera.cwg.api.generator.IChunkManagerFactory;
|
||||
import dev.tilera.cwg.api.hooks.IHookProvider;
|
||||
import dev.tilera.cwg.api.options.IGeneratorOptionProvider;
|
||||
import dev.tilera.cwg.api.options.IOption;
|
||||
import dev.tilera.cwg.api.utils.StringOption;
|
||||
import dev.tilera.cwg.hooks.ICavegenHook;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraft.world.WorldType;
|
||||
import net.minecraft.world.biome.WorldChunkManager;
|
||||
import net.minecraft.world.chunk.IChunkProvider;
|
||||
import net.minecraft.world.gen.ChunkProviderGenerate;
|
||||
|
||||
public class WorldtypeChunkManagerFactory implements IChunkManagerFactory {
|
||||
|
||||
@Override
|
||||
public AbstractChunkManager createChunkManager(IGeneratorOptionProvider options, World world) {
|
||||
WorldType original = world.getWorldInfo().getTerrainType();
|
||||
WorldType type = options.getValue("cwg:generator.worldtype:worldtype", WorldType.class);
|
||||
String generatorOptions = options.getString("cwg:generator.worldtype:options");
|
||||
String gnBack = tempChangeOpts(world, generatorOptions, type);
|
||||
IChunkProvider provider = type.getChunkGenerator(world, generatorOptions);
|
||||
WorldChunkManager manager = type.getChunkManager(world);
|
||||
tempChangeOpts(world, gnBack, original);
|
||||
if (provider instanceof ChunkProviderGenerate) {
|
||||
ICavegenHook hook = options.getValue("cwg:cavegen_hook", IHookProvider.class).getHook(ICavegenHook.class);
|
||||
hook.setCavegen((ChunkProviderGenerate) provider);
|
||||
}
|
||||
return new DelegateChunkManager(options, provider, manager);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getID() {
|
||||
return "cwg:worldtype";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDisplayName() {
|
||||
return "World Type";
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasSpecificOption(IOption<?> option) {
|
||||
return option.getID().startsWith("cwg:generator.worldtype:");
|
||||
}
|
||||
|
||||
private String tempChangeOpts(World world, String generatorOptions, WorldType worldType) {
|
||||
String temp = world.getWorldInfo().generatorOptions;
|
||||
world.getWorldInfo().generatorOptions = generatorOptions;
|
||||
world.getWorldInfo().terrainType = worldType;
|
||||
return temp;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRegister() {
|
||||
CwgGlobals.getOptionRegistry().registerOption(new WorldTypeOption());
|
||||
CwgGlobals.getOptionRegistry().registerOption(new StringOption("cwg:generator.worldtype:options", "Worldtype Generator Options", "", false, true));
|
||||
}
|
||||
|
||||
}
|
|
@ -9,4 +9,6 @@ public net.minecraft.world.gen.ChunkProviderGenerate field_73233_x # scatteredFe
|
|||
public net.minecraft.world.gen.ChunkProviderGenerate field_73226_t # caveGenerator
|
||||
public net.minecraft.world.gen.ChunkProviderGenerate field_73232_y # ravineGenerator
|
||||
public net.minecraft.world.gen.NoiseGeneratorOctaves field_76306_b # octaves
|
||||
public net.minecraft.world.gen.NoiseGeneratorOctaves field_76307_a # generatorCollection
|
||||
public net.minecraft.world.gen.NoiseGeneratorOctaves field_76307_a # generatorCollection
|
||||
public net.minecraft.world.storage.WorldInfo field_82576_c # generatorOptions
|
||||
public net.minecraft.world.storage.WorldInfo field_76098_b # terrainType
|
Loading…
Add table
Reference in a new issue