/
WorldHandler.java
106 lines (86 loc) · 3.11 KB
/
WorldHandler.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
package mods.natura.worldgen.retro;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Random;
import mods.natura.Natura;
import mods.natura.worldgen.BaseTreeWorldgen;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.World;
import net.minecraftforge.event.world.ChunkDataEvent;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
public class WorldHandler
{
private static HashSet dimensionBlacklist = new HashSet();
private static long genHash = 100;
public static WorldHandler instance = new WorldHandler();
@SubscribeEvent
public void handleChunkSaveEvent (ChunkDataEvent.Save event)
{
NBTTagCompound tag = new NBTTagCompound();
if (Natura.retrogen)
{
tag.setLong("Features", genHash);
}
event.getData().setTag("NaturaWorld", tag);
}
@SubscribeEvent
public void handleChunkLoadEvent (ChunkDataEvent.Load event)
{
int dim = event.world.provider.dimensionId;
if (dimensionBlacklist.contains(dim))
{
return;
}
boolean features = false;
boolean regen = false;
NBTTagCompound tag = (NBTTagCompound) event.getData().getTag("NaturaWorld");
if (tag != null)
{
features = tag.getLong("Features") != genHash && Natura.retrogen;
}
ChunkCoord cCoord = new ChunkCoord(event.getChunk());
if (tag == null && (Natura.retrogen) && !event.getData().getBoolean("Natura.Retrogen"))
{
regen = true;
}
if (features)
{
regen = true;
}
if (regen)
{
ArrayList chunks = (ArrayList) TickHandlerWorld.chunksToGen.get(Integer.valueOf(dim));
if (chunks == null)
{
TickHandlerWorld.chunksToGen.put(Integer.valueOf(dim), new ArrayList());
chunks = (ArrayList) TickHandlerWorld.chunksToGen.get(Integer.valueOf(dim));
}
if (chunks != null)
{
chunks.add(cCoord);
TickHandlerWorld.chunksToGen.put(Integer.valueOf(dim), chunks);
}
}
}
/* HELPER FUNCTIONS */
public void generateWorld (Random random, int chunkX, int chunkZ, World world, boolean newGen)
{
if (newGen && !Natura.retrogen)
{
return;
}
if (world.provider.dimensionId == 1)
{//|| world.provider.dimensionId == -1) {
return;
}
Natura.crops.generate(random, chunkX, chunkZ, world, world.provider.createChunkGenerator(), world.provider.createChunkGenerator());
Natura.clouds.generate(random, chunkX, chunkZ, world, world.provider.createChunkGenerator(), world.provider.createChunkGenerator());
BaseTreeWorldgen.retrogen = true;
Natura.trees.generate(random, chunkX, chunkZ, world, world.provider.createChunkGenerator(), world.provider.createChunkGenerator());
BaseTreeWorldgen.retrogen = false;
if (!newGen)
{
world.getChunkFromChunkCoords(chunkX, chunkZ).setChunkModified();
}
}
}