232 lines
6.3 KiB
Java
232 lines
6.3 KiB
Java
package com.gildedgames.the_aether.world;
|
|
|
|
import com.gildedgames.the_aether.AetherConfig;
|
|
import com.gildedgames.the_aether.network.AetherNetwork;
|
|
import com.gildedgames.the_aether.network.packets.PacketSendTime;
|
|
import com.gildedgames.the_aether.player.PlayerAether;
|
|
import cpw.mods.fml.relauncher.Side;
|
|
import cpw.mods.fml.relauncher.SideOnly;
|
|
import net.minecraft.entity.player.EntityPlayerMP;
|
|
import net.minecraft.util.MathHelper;
|
|
import net.minecraft.util.Vec3;
|
|
import net.minecraft.world.WorldProvider;
|
|
import net.minecraft.world.chunk.Chunk;
|
|
import net.minecraft.world.chunk.IChunkProvider;
|
|
import net.minecraftforge.client.IRenderHandler;
|
|
|
|
public class AetherWorldProvider extends WorldProvider {
|
|
private float[] colorsSunriseSunset = new float[4];
|
|
|
|
private boolean eternalDay;
|
|
public boolean eternalDayPrev;
|
|
private boolean shouldCycleCatchup;
|
|
public boolean shouldCycleCatchupPrev;
|
|
private long aetherTime = 6000;
|
|
|
|
public AetherWorldProvider() {
|
|
super();
|
|
}
|
|
|
|
@Override
|
|
protected void registerWorldChunkManager() {
|
|
this.worldChunkMgr = new WorldChunkManagerAether();
|
|
}
|
|
|
|
@Override
|
|
public float calculateCelestialAngle(long worldTime, float partialTicks) {
|
|
if (!AetherConfig.eternalDayDisabled()) {
|
|
if (!this.worldObj.isRemote) {
|
|
AetherData data = AetherData.getInstance(this.worldObj);
|
|
|
|
if (data.isEternalDay()) {
|
|
if (!data.isShouldCycleCatchup()) {
|
|
if (data.getAetherTime() != (worldTime % 24000L)
|
|
&& data.getAetherTime() != (worldTime + 1 % 24000L)
|
|
&& data.getAetherTime() != (worldTime - 1 % 24000L)) {
|
|
data.setAetherTime(
|
|
Math.floorMod(data.getAetherTime() - 1, 24000L)
|
|
);
|
|
} else {
|
|
data.setShouldCycleCatchup(true);
|
|
}
|
|
} else {
|
|
data.setAetherTime(worldTime);
|
|
}
|
|
|
|
this.aetherTime = data.getAetherTime();
|
|
AetherNetwork.sendToAll(new PacketSendTime(this.aetherTime));
|
|
data.setAetherTime(this.aetherTime);
|
|
} else {
|
|
data.setAetherTime(6000);
|
|
}
|
|
}
|
|
}
|
|
|
|
int i = (int
|
|
) (AetherConfig.eternalDayDisabled() ? worldTime : this.aetherTime % 24000L);
|
|
|
|
float f = ((float) i + partialTicks) / 24000.0F - 0.25F;
|
|
|
|
if (f < 0.0F) {
|
|
++f;
|
|
}
|
|
|
|
if (f > 1.0F) {
|
|
--f;
|
|
}
|
|
|
|
float f1 = 1.0F - (float) ((Math.cos((double) f * Math.PI) + 1.0D) / 2.0D);
|
|
f = f + (f1 - f) / 3.0F;
|
|
return f;
|
|
}
|
|
|
|
public void setIsEternalDay(boolean set) {
|
|
this.eternalDay = set;
|
|
}
|
|
|
|
public boolean getIsEternalDay() {
|
|
return this.eternalDay;
|
|
}
|
|
|
|
public void setShouldCycleCatchup(boolean set) {
|
|
this.shouldCycleCatchup = set;
|
|
}
|
|
|
|
public boolean getShouldCycleCatchup() {
|
|
return this.shouldCycleCatchup;
|
|
}
|
|
|
|
public void setAetherTime(long time) {
|
|
this.aetherTime = time;
|
|
}
|
|
|
|
public long getAetherTime() {
|
|
return this.aetherTime;
|
|
}
|
|
|
|
@Override
|
|
public float[] calcSunriseSunsetColors(float f, float f1) {
|
|
float f2 = 0.4F;
|
|
float f3 = MathHelper.cos(f * 3.141593F * 2.0F) - 0.0F;
|
|
float f4 = -0F;
|
|
|
|
if (f3 >= f4 - f2 && f3 <= f4 + f2) {
|
|
float f5 = (f3 - f4) / f2 * 0.5F + 0.5F;
|
|
float f6 = 1.0F - (1.0F - MathHelper.sin(f5 * 3.141593F)) * 0.99F;
|
|
f6 *= f6;
|
|
this.colorsSunriseSunset[0] = f5 * 0.3F + 0.1F;
|
|
this.colorsSunriseSunset[1] = f5 * f5 * 0.7F + 0.2F;
|
|
this.colorsSunriseSunset[2] = f5 * f5 * 0.7F + 0.2F;
|
|
this.colorsSunriseSunset[3] = f6;
|
|
return this.colorsSunriseSunset;
|
|
} else {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public int getRespawnDimension(EntityPlayerMP player) {
|
|
return PlayerAether.get(player).getBedLocation() == null
|
|
? 0
|
|
: AetherConfig.getAetherDimensionID();
|
|
}
|
|
|
|
@Override
|
|
public boolean canCoordinateBeSpawn(int i, int j) {
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public boolean canRespawnHere() {
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public IChunkProvider createChunkGenerator() {
|
|
return new ChunkProviderAether(this.worldObj, this.worldObj.getSeed());
|
|
}
|
|
|
|
public boolean canDoLightning(Chunk chunk) {
|
|
return false;
|
|
}
|
|
|
|
public boolean canDoRainSnowIce(Chunk chunk) {
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public Vec3 getFogColor(float f, float f1) {
|
|
int i = 0x9393BC;
|
|
|
|
float f2 = MathHelper.cos(f * 3.141593F * 2.0F) * 2.0F + 0.5F;
|
|
if (f2 < 0.0F) {
|
|
f2 = 0.0F;
|
|
}
|
|
if (f2 > 1.0F) {
|
|
f2 = 1.0F;
|
|
}
|
|
float f3 = (i >> 16 & 0xff) / 255F;
|
|
float f4 = (i >> 8 & 0xff) / 255F;
|
|
float f5 = (i & 0xff) / 255F;
|
|
f3 *= f2 * 0.94F + 0.06F;
|
|
f4 *= f2 * 0.94F + 0.06F;
|
|
f5 *= f2 * 0.91F + 0.09F;
|
|
|
|
return Vec3.createVectorHelper(f3, f4, f5);
|
|
}
|
|
|
|
@Override
|
|
public String getSaveFolder() {
|
|
return "Dim-Aether";
|
|
}
|
|
|
|
@Override
|
|
public double getVoidFogYFactor() {
|
|
return 100;
|
|
}
|
|
|
|
@Override
|
|
public boolean doesXZShowFog(int x, int z) {
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public boolean isSkyColored() {
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public double getHorizon() {
|
|
return 0.0;
|
|
}
|
|
|
|
@Override
|
|
public float getCloudHeight() {
|
|
return -5F;
|
|
}
|
|
|
|
@Override
|
|
public String getDimensionName() {
|
|
return "the_aether";
|
|
}
|
|
|
|
@Override
|
|
@SideOnly(Side.CLIENT)
|
|
public boolean getWorldHasVoidParticles() {
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
@SideOnly(Side.CLIENT)
|
|
public net.minecraftforge.client.IRenderHandler getWeatherRenderer() {
|
|
return new IRenderHandler() {
|
|
@Override
|
|
public void render(
|
|
float partialTicks,
|
|
net.minecraft.client.multiplayer.WorldClient world,
|
|
net.minecraft.client.Minecraft mc
|
|
) {}
|
|
};
|
|
}
|
|
}
|