Skip to content
Permalink
Browse files
Multi dim v2 + misc bugfixes
- Fixed village types and added "taiga" and "savanna" types.
- Fixed packet related issues for Forge and Bukkit
- Added "BO3AtSpawn" setting to worldconfig.ini, spawns a BO3 at world
spawn as a CustomObject
- Fixed default world settings (no more ocean worlds, thanks to
MCPitman)
- Fixed Entity(), living entities are now persistent by default, no more
name tags
- Fixed spawn point moving during world init (affected world borders,
cartographer, pre-generator and BO3AtSpawn)
- Fixed Guardians not spawning in water
-  World with "DIM-" prefix no longer appear in world creation menu,
renamed Cartographer world to "DIM-Cartographer".
- Fixed misc. multi-dim and biome bugs in related to world switching in
SP and rebooting the server.
- Fixed world borders, no more resource population across right and
bottom border.
- Fixed pre-generator UI bugs and logging
- Reduced logging (most logging uses DEBUG or WARN now)
- Fixed player spawn point and stronghold spawn point only being
eligible for placement in a few vanilla biomes.
- Removed worldgen selection menu (vanilla world gen is no longer needed
with the new default world and presets)
- Fixed some minor multi-dimension bugs involving hell and void biomes.
  • Loading branch information
PG85 committed Apr 22, 2017
1 parent e3cd07f commit 6ce053fed72ef48d58c73d73194d3945bb3a68ea
Showing with 590 additions and 646 deletions.
  1. +1 −1 README.md
  2. +1 −1 build.gradle
  3. +2 −0 common/src/main/java/com/khorn/terraincontrol/LocalWorld.java
  4. +3 −1 common/src/main/java/com/khorn/terraincontrol/TerrainControl.java
  5. +4 −1 common/src/main/java/com/khorn/terraincontrol/TerrainControlEngine.java
  6. +16 −16 common/src/main/java/com/khorn/terraincontrol/configuration/BiomeConfig.java
  7. +38 −46 common/src/main/java/com/khorn/terraincontrol/configuration/ClientConfigProvider.java
  8. +2 −2 common/src/main/java/com/khorn/terraincontrol/configuration/ConfigFile.java
  9. +3 −3 common/src/main/java/com/khorn/terraincontrol/configuration/ConfigToNetworkSender.java
  10. +0 −1 common/src/main/java/com/khorn/terraincontrol/configuration/PluginConfig.java
  11. +1 −14 common/src/main/java/com/khorn/terraincontrol/configuration/ServerConfigProvider.java
  12. +18 −10 common/src/main/java/com/khorn/terraincontrol/configuration/WorldConfig.java
  13. +10 −4 common/src/main/java/com/khorn/terraincontrol/configuration/standard/MinecraftBiomeTemplates.java
  14. +5 −3 common/src/main/java/com/khorn/terraincontrol/configuration/standard/WorldStandardValues.java
  15. +1 −31 common/src/main/java/com/khorn/terraincontrol/customobjects/CustomObjectStructure.java
  16. +43 −6 common/src/main/java/com/khorn/terraincontrol/generator/ObjectSpawner.java
  17. +1 −3 common/src/main/java/com/khorn/terraincontrol/generator/resource/SmallLakeGen.java
  18. +1 −6 common/src/main/java/com/khorn/terraincontrol/generator/terrain/CavesGen.java
  19. +7 −4 platforms/bukkit/src/main/java/com/khorn/terraincontrol/bukkit/BukkitEngine.java
  20. +28 −22 platforms/bukkit/src/main/java/com/khorn/terraincontrol/bukkit/BukkitWorld.java
  21. +1 −1 platforms/bukkit/src/main/java/com/khorn/terraincontrol/bukkit/JsonToNBT.java
  22. +2 −0 platforms/bukkit/src/main/java/com/khorn/terraincontrol/bukkit/NBTException.java
  23. +0 −1 platforms/bukkit/src/main/java/com/khorn/terraincontrol/bukkit/TCPlugin.java
  24. +7 −3 platforms/bukkit/src/main/java/com/khorn/terraincontrol/bukkit/events/TCSender.java
  25. +29 −4 platforms/bukkit/src/main/java/com/khorn/terraincontrol/bukkit/generator/structures/VillageGen.java
  26. +3 −3 platforms/bukkit/src/main/resources/plugin.yml
  27. +36 −2 platforms/forge/src/main/java/com/khorn/terraincontrol/forge/ForgeEngine.java
  28. +3 −1 platforms/forge/src/main/java/com/khorn/terraincontrol/forge/ForgeMaterialData.java
  29. +1 −5 platforms/forge/src/main/java/com/khorn/terraincontrol/forge/ForgeMojangSettings.java
  30. +72 −47 platforms/forge/src/main/java/com/khorn/terraincontrol/forge/ForgeWorld.java
  31. +2 −6 platforms/forge/src/main/java/com/khorn/terraincontrol/forge/TCCommandHandler.java
  32. +4 −5 platforms/forge/src/main/java/com/khorn/terraincontrol/forge/TCDimensionManager.java
  33. +4 −60 platforms/forge/src/main/java/com/khorn/terraincontrol/forge/TCPlugin.java
  34. +21 −17 platforms/forge/src/main/java/com/khorn/terraincontrol/forge/WorldLoader.java
  35. +2 −2 platforms/forge/src/main/java/com/khorn/terraincontrol/forge/WorldProviderTC.java
  36. +1 −3 .../forge/src/main/java/com/khorn/terraincontrol/forge/client/events/ClientNetworkEventListener.java
  37. +21 −6 platforms/forge/src/main/java/com/khorn/terraincontrol/forge/events/ChunkEventListener.java
  38. +1 −4 platforms/forge/src/main/java/com/khorn/terraincontrol/forge/events/PlayerTracker.java
  39. +37 −54 platforms/forge/src/main/java/com/khorn/terraincontrol/forge/events/WorldListener.java
  40. +11 −2 platforms/forge/src/main/java/com/khorn/terraincontrol/forge/generator/BiomeGenCustom.java
  41. +9 −14 platforms/forge/src/main/java/com/khorn/terraincontrol/forge/generator/Cartographer.java
  42. +9 −83 platforms/forge/src/main/java/com/khorn/terraincontrol/forge/generator/ChunkProvider.java
  43. +55 −31 platforms/forge/src/main/java/com/khorn/terraincontrol/forge/generator/Pregenerator.java
  44. +21 −9 platforms/forge/src/main/java/com/khorn/terraincontrol/forge/generator/TCBiomeProvider.java
  45. +4 −6 platforms/forge/src/main/java/com/khorn/terraincontrol/forge/generator/TCTeleporter.java
  46. +7 −0 platforms/forge/src/main/java/com/khorn/terraincontrol/forge/generator/structure/MineshaftGen.java
  47. +16 −7 platforms/forge/src/main/java/com/khorn/terraincontrol/forge/generator/structure/VillageStart.java
  48. +2 −5 platforms/forge/src/main/java/com/khorn/terraincontrol/forge/gui/GuiHandler.java
  49. +15 −12 platforms/forge/src/main/java/com/khorn/terraincontrol/forge/gui/TCGuiCreateWorld.java
  50. +0 −69 platforms/forge/src/main/java/com/khorn/terraincontrol/forge/gui/TCGuiSelectCreateWorldMode.java
  51. +3 −3 platforms/forge/src/main/resources/META-INF/openterraingenerator_at.cfg
  52. +6 −6 platforms/forge/src/main/resources/mcmod.info
@@ -26,7 +26,7 @@ To learn more, check out <a href="https://biomebundle.wixsite.com/openterraingen
* [Compilation](./COMPILING.md) instructions for command-line, Eclipse and IntelliJ
* [Version history](https://github.com/MCTCP/TerrainControl/wiki/Version-history)

# This branch (OpenTerrainGenerator) is developed by PeeGee85 (aka PG85)
## This branch (OpenTerrainGenerator) is developed by PeeGee85 (aka PG85)

## Original TerrainControl developers and maintainers
* <a href="https://github.com/rutgerkok">Rutger Kok</a>
@@ -5,7 +5,7 @@ defaultTasks 'removeOldReleases', 'build', 'createReleaseJar', 'install'

allprojects
{
version = "GitRDoneEditionV8"
version = "1.10.2-v14"
group = "com.khorn.terraincontrol"

// Version of the shadow plugin
@@ -236,4 +236,6 @@
public void mergeVanillaBiomeMobSpawnSettings(BiomeConfigStub biomeConfigStub);

void SpawnEntity(EntityFunction entityData);

public ChunkCoordinate getSpawnChunk();
}
@@ -19,6 +19,8 @@
import java.util.List;
import java.util.Random;

import sun.reflect.generics.reflectiveObjects.NotImplementedException;

public class TerrainControl
{
// TODO: This shouldn't be needed ideally
@@ -192,7 +194,7 @@ public static LocalBiome getBiomeAllWorlds(String name)
if(worlds != null)
{
for(LocalWorld world : worlds)
{
{
LocalBiome biome = world.getBiomeByNameOrNull(name);
if(biome != null)
{
@@ -1,5 +1,6 @@
package com.khorn.terraincontrol;

import com.khorn.terraincontrol.configuration.BiomeConfig;
import com.khorn.terraincontrol.configuration.ConfigFunctionsManager;
import com.khorn.terraincontrol.configuration.PluginConfig;
import com.khorn.terraincontrol.configuration.io.FileSettingsReader;
@@ -16,6 +17,7 @@
import com.khorn.terraincontrol.util.ChunkCoordinate;
import com.khorn.terraincontrol.util.minecraftTypes.DefaultMaterial;

import java.io.DataOutput;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
@@ -311,5 +313,6 @@ public void registerEventHandler(EventHandler handler, EventPriority priority)
* @return The materialData.
*/
public abstract LocalMaterialData toLocalMaterialData(DefaultMaterial defaultMaterial, int blockData);


public abstract void addPlatformSpecificDataToPacket(DataOutput stream, BiomeConfig config, boolean isSinglePlayer);
}
@@ -26,6 +26,8 @@
import java.io.IOException;
import java.util.*;

import sun.reflect.generics.reflectiveObjects.NotImplementedException;

public class BiomeConfig extends ConfigFile
{
public String biomeExtends;
@@ -138,7 +140,9 @@
{
disabled,
wood,
sandstone
sandstone,
taiga,
savanna
}

public VillageType villageType;
@@ -763,7 +767,7 @@ protected void writeConfigSettings(SettingsMap writer)
"Whether a Nether Fortress can start in this biome. Might extend to neighbor biomes.");

writer.putSetting(BiomeStandardValues.VILLAGE_TYPE, villageType,
"The village type in this biome. Can be wood, sandstone or disabled.");
"The village type in this biome. Can be wood, sandstone, taiga, savanna or disabled.");

writer.putSetting(BiomeStandardValues.MINESHAFT_TYPE, mineshaftType,
"The mineshaft type in this biome. Can be normal, mesa or disabled.");
@@ -802,8 +806,7 @@ protected void writeConfigSettings(SettingsMap writer)
"In custom biomes, you can add your own mobgroups in the lists below. In the vanilla biomes,",
"your changes are ignored.",
"");
} else
{
} else {
writer.bigTitle("Mob spawning",
"It's not possible to change mob spawns in vanilla biomes. These",
"are the values used by vanilla for this biome. They are read-only:",
@@ -1038,8 +1041,7 @@ protected void renameOldSettings(SettingsMap settings)
}
}

private void addDefaultMobGroups(SettingsMap settings, Setting<List<WeightedMobSpawnGroup>> mobSetting,
List<WeightedMobSpawnGroup> defaultGroups)
private void addDefaultMobGroups(SettingsMap settings, Setting<List<WeightedMobSpawnGroup>> mobSetting, List<WeightedMobSpawnGroup> defaultGroups)
{
List<WeightedMobSpawnGroup> emptyList = Collections.emptyList();
List<WeightedMobSpawnGroup> groups = new ArrayList<WeightedMobSpawnGroup>();
@@ -1048,7 +1050,7 @@ private void addDefaultMobGroups(SettingsMap settings, Setting<List<WeightedMobS
settings.putSetting(mobSetting, groups);
}

public void writeToStream(DataOutput stream) throws IOException
public void writeToStream(DataOutput stream, boolean isSinglePlayer) throws IOException
{
writeStringToStream(stream, getName());

@@ -1060,16 +1062,14 @@ public void writeToStream(DataOutput stream) throws IOException
stream.writeBoolean(this.grassColorIsMultiplier);
stream.writeInt(this.foliageColor);
stream.writeBoolean(this.foliageColorIsMultiplier);

writeStringToStream(stream, this.biomeDictId);

// TODO: Why exactly do all these need to be sent to the client? (Forge SP stuff?)

writeStringToStream(stream, WeightedMobSpawnGroup.toJson(this.spawnMonstersMerged));
writeStringToStream(stream, WeightedMobSpawnGroup.toJson(this.spawnCreaturesMerged));
writeStringToStream(stream, WeightedMobSpawnGroup.toJson(this.spawnWaterCreaturesMerged));
writeStringToStream(stream, WeightedMobSpawnGroup.toJson(this.spawnAmbientCreaturesMerged));
if(isSinglePlayer) // Forge SP seems to handle some part of mob spawning on the client so need to send mob spawning info.
{
writeStringToStream(stream, this.inheritMobsBiomeName);
}

writeStringToStream(stream, this.biomeDictId);

writeStringToStream(stream, this.inheritMobsBiomeName);
TerrainControl.getEngine().addPlatformSpecificDataToPacket(stream, this, isSinglePlayer);
}
}
@@ -36,7 +36,7 @@
*/
private LocalBiome[] biomes;

public ClientConfigProvider(DataInputStream stream, LocalWorld world) throws IOException
public ClientConfigProvider(DataInputStream stream, LocalWorld world, boolean isSinglePlayer) throws IOException
{
// We need a valid CustomObjects object with things like the trees in
// it, so that the configs can load without errors
@@ -76,68 +76,60 @@ public ClientConfigProvider(DataInputStream stream, LocalWorld world) throws IOE
biomeReader.putSetting(BiomeStandardValues.GRASS_COLOR, stream.readInt());
biomeReader.putSetting(BiomeStandardValues.GRASS_COLOR_IS_MULTIPLIER, stream.readBoolean());
biomeReader.putSetting(BiomeStandardValues.FOLIAGE_COLOR, stream.readInt());
biomeReader.putSetting(BiomeStandardValues.FOLIAGE_COLOR_IS_MULTIPLIER, stream.readBoolean());
// TODO: Are these really necessary? (animals seem to be spawning on Forge SP when they shouldnt be without this)
biomeReader.putSetting(BiomeStandardValues.FOLIAGE_COLOR_IS_MULTIPLIER, stream.readBoolean());

// TODO: Are these really necessary? <-- Maybe only for Forge SP?

try
String biomeDictId = ConfigFile.readStringFromStream(stream);
biomeReader.putSetting(BiomeStandardValues.BIOME_DICT_ID, biomeDictId); // <-- This might be used even in MP by client mods?

// TODO: Are these really necessary? Forge SP seems to handle some part of mob spawning on the client, without this code mobs are spawning when they shouldn't.

if(isSinglePlayer)
{
String inheritedMobsBiomeName = ConfigFile.readStringFromStream(stream);
biomeReader.putSetting(BiomeStandardValues.INHERIT_MOBS_BIOME_NAME, inheritedMobsBiomeName);

String spawnMonsters = ConfigFile.readStringFromStream(stream);
try {
try
{
biomeReader.putSetting(BiomeStandardValues.SPAWN_MONSTERS, WeightedMobSpawnGroup.fromJson(spawnMonsters));
} catch (InvalidConfigException e) {
// TODO Auto-generated catch block
}
catch (InvalidConfigException e)
{
e.printStackTrace();
}
} catch(EOFException ex) { }

try
{

String spawnCreatures = ConfigFile.readStringFromStream(stream);
try {
try
{
biomeReader.putSetting(BiomeStandardValues.SPAWN_CREATURES, WeightedMobSpawnGroup.fromJson(spawnCreatures));
} catch (InvalidConfigException e) {
// TODO Auto-generated catch block
}
catch (InvalidConfigException e)
{
e.printStackTrace();
}
} catch(EOFException ex) { }

try
{

String spawnWaterCreatures = ConfigFile.readStringFromStream(stream);
try {
try
{
biomeReader.putSetting(BiomeStandardValues.SPAWN_WATER_CREATURES, WeightedMobSpawnGroup.fromJson(spawnWaterCreatures));
} catch (InvalidConfigException e) {
// TODO Auto-generated catch block
}
catch (InvalidConfigException e)
{
e.printStackTrace();
}
} catch(EOFException ex) { }

try
{

String spawnAmbientCreatures = ConfigFile.readStringFromStream(stream);
try {
try
{
biomeReader.putSetting(BiomeStandardValues.SPAWN_AMBIENT_CREATURES, WeightedMobSpawnGroup.fromJson(spawnAmbientCreatures));
} catch (InvalidConfigException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch(EOFException ex) { }

// TODO: Are these really necessary?

try
{
String biomeDictId = ConfigFile.readStringFromStream(stream);
biomeReader.putSetting(BiomeStandardValues.BIOME_DICT_ID, biomeDictId);
} catch(EOFException ex) { }

try
{
String inheritedMobsBiomeName = ConfigFile.readStringFromStream(stream);
biomeReader.putSetting(BiomeStandardValues.INHERIT_MOBS_BIOME_NAME, inheritedMobsBiomeName);
} catch(EOFException ex) { }

catch (InvalidConfigException e)
{
e.printStackTrace();
}
}

BiomeLoadInstruction instruction = new BiomeLoadInstruction(biomeName, id, defaultSettings);
BiomeConfig config = new BiomeConfig(instruction, null, biomeReader, worldConfig);
@@ -140,7 +140,7 @@ protected final int lowerThanOrEqualTo(int currentValue, int maximumValue)

public static void writeStringToStream(DataOutput stream, String value) throws IOException
{
byte[] bytes = value.getBytes();
byte[] bytes = ("S:" + (value == null ? "" : value)).getBytes();
stream.writeShort(bytes.length);
stream.write(bytes);
}
@@ -151,7 +151,7 @@ public static String readStringFromStream(DataInputStream stream) throws IOExcep
if (stream.read(chars, 0, chars.length) != chars.length)
throw new EOFException();

return new String(chars);
return new String(chars).replace("S:", "");
}

/**
@@ -25,7 +25,7 @@
* @param stream Stream to write to.
* @throws IOException If an IO error occurs.
*/
public static void send(ConfigProvider configProvider, DataOutput stream) throws IOException
public static void send(ConfigProvider configProvider, DataOutput stream, boolean isSinglePlayer) throws IOException
{
WorldConfig worldConfig = configProvider.getWorldConfig();
LocalBiome[] biomes = configProvider.getBiomeArray();
@@ -61,7 +61,7 @@ public static void send(ConfigProvider configProvider, DataOutput stream) throws
ConfigFile.writeStringToStream(stream, biome.getName());
stream.writeInt(biome.getIds().getSavedId());
}

// BiomeConfigs
stream.writeInt(nonVirtualBiomes.size());
for (LocalBiome biome : nonVirtualBiomes)
@@ -71,7 +71,7 @@ public static void send(ConfigProvider configProvider, DataOutput stream) throws
continue;
}
stream.writeInt(biome.getIds().getSavedId());
biome.getBiomeConfig().writeToStream(stream);
biome.getBiomeConfig().writeToStream(stream, isSinglePlayer);
}
}
}
@@ -69,7 +69,6 @@ protected void correctSettings()
this.biomeConfigExtension, newExtension);
this.biomeConfigExtension = newExtension;
}

}

@Override
@@ -53,17 +53,11 @@
*/
private LocalBiome[] biomes;

/**
* Holds all biomes that aren't virtual. These need to be sent to all
* players on the server that have Open Terrain Generator installed.
*/
private final Collection<LocalBiome> savedBiomes = new HashSet<LocalBiome>();

/**
* The number of loaded biomes.
*/
private int biomesCount;

/**
* Loads the settings from the given directory for the given world.
* @param settingsDir The directory to load from.
@@ -213,7 +207,6 @@ public void reload()
{
// Clear biome collections
Arrays.fill(this.biomes, null);
this.savedBiomes.clear();
this.biomesCount = 0;

// Load again
@@ -325,12 +318,6 @@ public int compare(BiomeConfig a, BiomeConfig b) {
// Update WorldConfig with actual id
worldConfig.customBiomeGenerationIds.put(biome.getName(), generationId);

// If not virtual, add to saved biomes set
if (!biome.getIds().isVirtual())
{
savedBiomes.add(biome);
}

// Indexing ReplacedBlocks
if (!this.worldConfig.BiomeConfigsHaveReplacement)
{

0 comments on commit 6ce053f

Please sign in to comment.