Backported eternal day behavior. Not completely sure if defeating the sun spirit gets rid of it like it should since the fight appears to be bugged, will test that after the fight is fixed.

This commit is contained in:
bconlon 2020-06-24 02:16:12 -07:00
parent 8b257fcadb
commit 6bd9436a32
10 changed files with 443 additions and 21 deletions

View file

@ -1,5 +1,13 @@
package com.legacy.aether;
import com.legacy.aether.network.AetherNetwork;
import com.legacy.aether.network.packets.PacketSendEternalDay;
import com.legacy.aether.network.packets.PacketSendShouldCycle;
import com.legacy.aether.network.packets.PacketSendTime;
import com.legacy.aether.world.AetherData;
import com.legacy.aether.world.AetherWorldProvider;
import cpw.mods.fml.common.gameevent.TickEvent;
import net.minecraft.client.Minecraft;
import net.minecraft.entity.EntityAgeable;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.boss.EntityWither;
@ -10,10 +18,12 @@ import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EntityDamageSource;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.util.MovingObjectPosition.MovingObjectType;
import net.minecraft.world.World;
import net.minecraft.world.WorldProvider;
import net.minecraftforge.event.entity.EntityStruckByLightningEvent;
import net.minecraftforge.event.entity.living.LivingDropsEvent;
import net.minecraftforge.event.entity.player.EntityInteractEvent;
@ -34,6 +44,7 @@ import com.legacy.aether.registry.achievements.AchievementsAether;
import cpw.mods.fml.common.eventhandler.Event;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.common.gameevent.PlayerEvent.ItemCraftedEvent;
import net.minecraftforge.event.world.WorldEvent;
public class
AetherEventHandler {
@ -233,4 +244,25 @@ AetherEventHandler {
return stackID == ItemsAether.gravitite_shovel || stackID == ItemsAether.gravitite_axe || stackID == ItemsAether.gravitite_pickaxe;
}
@SubscribeEvent
public void onWorldTick(TickEvent.WorldTickEvent event)
{
if (!event.world.isRemote)
{
AetherData data = AetherData.getInstance(event.world);
WorldProvider provider = event.world.provider;
if (provider instanceof AetherWorldProvider)
{
AetherWorldProvider providerAether = (AetherWorldProvider) provider;
providerAether.setIsEternalDay(data.isEternalDay());
AetherNetwork.sendToAll(new PacketSendEternalDay(providerAether.getIsEternalDay()));
providerAether.setShouldCycleCatchup(data.isShouldCycleCatchup());
AetherNetwork.sendToAll(new PacketSendShouldCycle(providerAether.getShouldCycleCatchup()));
}
}
}
}

View file

@ -1,12 +1,16 @@
package com.legacy.aether.blocks.container;
import com.legacy.aether.AetherConfig;
import com.legacy.aether.world.AetherData;
import com.legacy.aether.world.AetherWorldProvider;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.client.entity.EntityPlayerSP;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.client.resources.I18n;
import net.minecraft.command.ICommand;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.server.MinecraftServer;
import net.minecraft.util.ChatComponentText;
import net.minecraft.util.IIcon;
@ -19,6 +23,7 @@ import com.legacy.aether.blocks.BlocksAether;
import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.world.WorldProvider;
public class BlockSunAltar extends Block {
@ -59,15 +64,46 @@ public class BlockSunAltar extends Block {
@Override
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) {
MinecraftServer server = FMLCommonHandler.instance().getMinecraftServerInstance();
if (player.dimension == AetherConfig.getAetherDimensionID())
{
if (server != null && ((server.isDedicatedServer() && server.getConfigurationManager().func_152596_g(player.getGameProfile()) && player.capabilities.isCreativeMode) || !server.isDedicatedServer())) {
Aether.proxy.openSunAltar();
} else if (world.isRemote) {
if (player instanceof EntityPlayerSP && player.capabilities.isCreativeMode) {
Aether.proxy.openSunAltar();
if (world.provider instanceof AetherWorldProvider)
{
AetherWorldProvider provider = (AetherWorldProvider) world.provider;
MinecraftServer server = FMLCommonHandler.instance().getMinecraftServerInstance();
if (provider.getIsEternalDay() && provider.getShouldCycleCatchup())
{
if (server != null && ((server.isDedicatedServer() && server.getConfigurationManager().func_152596_g(player.getGameProfile()) || !server.isDedicatedServer())))
{
Aether.proxy.openSunAltar();
}
else if (world.isRemote)
{
if (player instanceof EntityPlayerSP && player.canCommandSenderUseCommand(2, ""))
{
Aether.proxy.openSunAltar();
}
else
{
player.addChatComponentMessage(new ChatComponentText(I18n.format("gui.sun_altar.permission")));
}
}
}
else if (!provider.getIsEternalDay())
{
if (world.isRemote)
{
player.addChatComponentMessage(new ChatComponentText(I18n.format("gui.sun_altar.eternal_day")));
}
}
else if (!provider.getShouldCycleCatchup())
{
if (world.isRemote)
{
player.addChatComponentMessage(new ChatComponentText(I18n.format("gui.sun_altar.cycle_catchup")));
}
}
}
}

View file

@ -2,6 +2,7 @@ package com.legacy.aether.entities.bosses.sun_spirit;
import java.util.List;
import com.legacy.aether.world.AetherWorldProvider;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.entity.Entity;
@ -33,6 +34,7 @@ import com.legacy.aether.entities.util.EntityAetherItem;
import com.legacy.aether.items.ItemsAether;
import com.legacy.aether.player.PlayerAether;
import com.legacy.aether.registry.achievements.AchievementsAether;
import net.minecraft.world.WorldProvider;
public class EntitySunSpirit extends EntityFlying implements IMob, IAetherBoss {
@ -488,6 +490,25 @@ public class EntitySunSpirit extends EntityFlying implements IMob, IAetherBoss {
}
}
@Override
protected void onDeathUpdate()
{
WorldProvider provider = this.worldObj.provider;
if (provider instanceof AetherWorldProvider)
{
AetherWorldProvider aetherProvider = (AetherWorldProvider) provider;
if (!this.worldObj.isRemote)
{
if (aetherProvider.getIsEternalDay())
{
aetherProvider.setIsEternalDay(true);
}
}
}
}
private void setDoor(Block block) {
int x, y, z;

View file

@ -1,18 +1,9 @@
package com.legacy.aether.network;
import com.legacy.aether.network.packets.*;
import net.minecraft.entity.player.EntityPlayerMP;
import com.legacy.aether.Aether;
import com.legacy.aether.network.packets.PacketAccessory;
import com.legacy.aether.network.packets.PacketAchievement;
import com.legacy.aether.network.packets.PacketDialogueClicked;
import com.legacy.aether.network.packets.PacketDisplayDialogue;
import com.legacy.aether.network.packets.PacketInitiateValkyrieFight;
import com.legacy.aether.network.packets.PacketOpenContainer;
import com.legacy.aether.network.packets.PacketPerkChanged;
import com.legacy.aether.network.packets.PacketSendPoison;
import com.legacy.aether.network.packets.PacketSendSneaking;
import com.legacy.aether.network.packets.PacketSetTime;
import cpw.mods.fml.common.network.NetworkRegistry;
import cpw.mods.fml.common.network.simpleimpl.IMessage;
@ -48,6 +39,10 @@ public class AetherNetwork {
INSTANCE.registerMessage(PacketSetTime.class, PacketSetTime.class, discriminant++, Side.SERVER);
INSTANCE.registerMessage(PacketSendSneaking.class, PacketSendSneaking.class, discriminant++, Side.SERVER);
INSTANCE.registerMessage(PacketSendEternalDay.class, PacketSendEternalDay.class, discriminant++, Side.CLIENT);
INSTANCE.registerMessage(PacketSendShouldCycle.class, PacketSendShouldCycle.class, discriminant++, Side.CLIENT);
INSTANCE.registerMessage(PacketSendTime.class, PacketSendTime.class, discriminant++, Side.CLIENT);
}
public static void sendToAll(IMessage message) {

View file

@ -0,0 +1,53 @@
package com.legacy.aether.network.packets;
import com.legacy.aether.world.AetherWorldProvider;
import io.netty.buffer.ByteBuf;
import net.minecraft.client.Minecraft;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.world.WorldProvider;
public class PacketSendEternalDay extends AetherPacket<PacketSendEternalDay>
{
private boolean eternalDay;
public PacketSendEternalDay()
{
}
public PacketSendEternalDay(boolean eternalDay)
{
this.eternalDay = eternalDay;
}
@Override
public void fromBytes(ByteBuf buf)
{
this.eternalDay = buf.readBoolean();
}
@Override
public void toBytes(ByteBuf buf)
{
buf.writeBoolean(this.eternalDay);
}
@Override
public void handleClient(PacketSendEternalDay message, EntityPlayer player)
{
WorldProvider provider = Minecraft.getMinecraft().theWorld.provider;
if (provider instanceof AetherWorldProvider)
{
AetherWorldProvider providerAether = (AetherWorldProvider) provider;
providerAether.setIsEternalDay(message.eternalDay);
}
}
@Override
public void handleServer(PacketSendEternalDay message, EntityPlayer player)
{
}
}

View file

@ -0,0 +1,53 @@
package com.legacy.aether.network.packets;
import com.legacy.aether.world.AetherWorldProvider;
import io.netty.buffer.ByteBuf;
import net.minecraft.client.Minecraft;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.world.WorldProvider;
public class PacketSendShouldCycle extends AetherPacket<PacketSendShouldCycle>
{
private boolean shouldCycle;
public PacketSendShouldCycle()
{
}
public PacketSendShouldCycle(boolean shouldCycle)
{
this.shouldCycle = shouldCycle;
}
@Override
public void fromBytes(ByteBuf buf)
{
this.shouldCycle = buf.readBoolean();
}
@Override
public void toBytes(ByteBuf buf)
{
buf.writeBoolean(this.shouldCycle);
}
@Override
public void handleClient(PacketSendShouldCycle message, EntityPlayer player)
{
WorldProvider provider = Minecraft.getMinecraft().theWorld.provider;
if (provider instanceof AetherWorldProvider)
{
AetherWorldProvider providerAether = (AetherWorldProvider) provider;
providerAether.setShouldCycleCatchup(message.shouldCycle);
}
}
@Override
public void handleServer(PacketSendShouldCycle message, EntityPlayer player)
{
}
}

View file

@ -0,0 +1,55 @@
package com.legacy.aether.network.packets;
import com.legacy.aether.world.AetherData;
import com.legacy.aether.world.AetherWorldProvider;
import io.netty.buffer.ByteBuf;
import net.minecraft.client.Minecraft;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.WorldProvider;
public class PacketSendTime extends AetherPacket<PacketSendTime>
{
private long time;
public PacketSendTime()
{
}
public PacketSendTime(long time)
{
this.time = time;
}
@Override
public void fromBytes(ByteBuf buf)
{
this.time = buf.readLong();
}
@Override
public void toBytes(ByteBuf buf)
{
buf.writeLong(this.time);
}
@Override
public void handleClient(PacketSendTime message, EntityPlayer player)
{
WorldProvider provider = Minecraft.getMinecraft().theWorld.provider;
if (provider instanceof AetherWorldProvider)
{
AetherWorldProvider providerAether = (AetherWorldProvider) provider;
providerAether.setAetherTime(message.time);
}
}
@Override
public void handleServer(PacketSendTime message, EntityPlayer player)
{
}
}

View file

@ -0,0 +1,84 @@
package com.legacy.aether.world;
import com.legacy.aether.Aether;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.World;
import net.minecraft.world.WorldSavedData;
import net.minecraft.world.storage.MapStorage;
public class AetherData extends WorldSavedData
{
final static String key = Aether.MOD_ID;
private NBTTagCompound data = new NBTTagCompound();
private boolean eternalDay;
private boolean shouldCycleCatchup;
private long aetherTime;
public AetherData (String tagName) {
super(tagName);
}
public static AetherData getInstance(World world) {
MapStorage storage = world.mapStorage;
AetherData result = (AetherData) storage.loadData(AetherData.class, key);
if (result == null) {
result = new AetherData(key);
storage.setData(key, result);
}
return result;
}
@Override
public void readFromNBT(NBTTagCompound compound) {
data = compound.getCompoundTag(key);
}
@Override
public void writeToNBT(NBTTagCompound compound) {
compound.setTag(key, data);
}
public NBTTagCompound getData() {
return data;
}
public boolean isEternalDay()
{
this.eternalDay = data.getBoolean("EternalDay");
return this.eternalDay;
}
public void setEternalDay(boolean eternalDay)
{
this.eternalDay = eternalDay;
data.setBoolean("EternalDay", this.eternalDay);
this.markDirty();
}
public boolean isShouldCycleCatchup()
{
this.shouldCycleCatchup = data.getBoolean("ShouldCycleCatchup");
return this.shouldCycleCatchup;
}
public void setShouldCycleCatchup(boolean shouldCycleCatchup)
{
this.shouldCycleCatchup = shouldCycleCatchup;
data.setBoolean("ShouldCycleCatchup", this.shouldCycleCatchup);
this.markDirty();
}
public long getAetherTime()
{
this.aetherTime = data.getLong("Time");
return this.aetherTime;
}
public void setAetherTime(long aetherTime)
{
this.aetherTime = aetherTime;
data.setLong("Time", this.aetherTime);
this.markDirty();
}
}

View file

@ -1,5 +1,8 @@
package com.legacy.aether.world;
import com.legacy.aether.network.AetherNetwork;
import com.legacy.aether.network.packets.PacketSendTime;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.MathHelper;
import net.minecraft.util.Vec3;
import net.minecraft.world.WorldProvider;
@ -13,6 +16,10 @@ public class AetherWorldProvider extends WorldProvider {
private float[] colorsSunriseSunset = new float[4];
private boolean eternalDay;
private boolean shouldCycleCatchup;
private long aetherTime = 6000;
public AetherWorldProvider() {
super();
}
@ -22,6 +29,90 @@ public class AetherWorldProvider extends WorldProvider {
this.worldChunkMgr = new WorldChunkManagerAether();
}
@Override
public float calculateCelestialAngle(long worldTime, float partialTicks)
{
if (!this.worldObj.isRemote)
{
AetherData data = AetherData.getInstance(this.worldObj);
if (data.isEternalDay())
{
if (!data.isShouldCycleCatchup())
{
if (data.getAetherTime() != (worldTime % 24000L))
{
data.setAetherTime(Math.floorMod(data.getAetherTime() - 1, 24000L));
}
else if (data.getAetherTime() == ((worldTime + 1) % 24000L) || data.getAetherTime() == ((worldTime - 1) % 24000L) || data.getAetherTime() == (worldTime % 24000L))
{
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)(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;
@ -122,10 +213,10 @@ public class AetherWorldProvider extends WorldProvider {
}
@Override
@SideOnly(Side.CLIENT)
public boolean getWorldHasVoidParticles() {
return false;
}
@SideOnly(Side.CLIENT)
public boolean getWorldHasVoidParticles() {
return false;
}
@Override
@SideOnly(Side.CLIENT)
@ -137,5 +228,4 @@ public class AetherWorldProvider extends WorldProvider {
}
};
}
}

View file

@ -399,6 +399,9 @@ death.attack.lightning_ball=%1$s was zapped by %2$s's Thunder Ball
# Gui messages
gui.sun_altar.message=The sun spirit has no power over this realm.
gui.sun_altar.eternal_day=The sun spirit is still in control of this realm.
gui.sun_altar.cycle_catchup=The sun is still moving to its correct position.
gui.sun_altar.permission=You don't have permission to perform this action.
gui.loading.enteraether=Ascending to the Aether
gui.loading.exitaether=Descending from the Aether