Servers now sync their EnergyValue mappings to clients when they join. This means clients don't have to change their configs when joining servers (different servers can have different values)

This commit is contained in:
Pahimar 2014-09-04 11:30:22 -04:00
parent 04bdf72504
commit 7244bdedf6
4 changed files with 125 additions and 1 deletions

View file

@ -1,8 +1,12 @@
package com.pahimar.ee3.handler;
import com.pahimar.ee3.exchange.EnergyValueRegistry;
import com.pahimar.ee3.network.PacketHandler;
import com.pahimar.ee3.network.message.MessageEnergyValueSync;
import com.pahimar.ee3.reference.Reference;
import com.pahimar.ee3.util.LogHelper;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraftforge.event.entity.player.PlayerEvent;
import java.io.*;
@ -47,4 +51,10 @@ public class PlayerEventHandler
}
}
}
@SubscribeEvent
public void onPlayerLoggedInEvent(cpw.mods.fml.common.gameevent.PlayerEvent.PlayerLoggedInEvent event)
{
PacketHandler.INSTANCE.sendTo(new MessageEnergyValueSync(EnergyValueRegistry.getInstance()), (EntityPlayerMP) event.player);
}
}

View file

@ -18,5 +18,6 @@ public class PacketHandler
INSTANCE.registerMessage(MessageTileEntityGlassBell.class, MessageTileEntityGlassBell.class, 3, Side.CLIENT);
INSTANCE.registerMessage(MessageKeyPressed.class, MessageKeyPressed.class, 4, Side.SERVER);
INSTANCE.registerMessage(MessageSoundEvent.class, MessageSoundEvent.class, 5, Side.CLIENT);
INSTANCE.registerMessage(MessageEnergyValueSync.class, MessageEnergyValueSync.class, 6, Side.CLIENT);
}
}

View file

@ -0,0 +1,111 @@
package com.pahimar.ee3.network.message;
import com.pahimar.ee3.exchange.EnergyValueRegistry;
import com.pahimar.ee3.util.LogHelper;
import cpw.mods.fml.common.network.simpleimpl.IMessage;
import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
import cpw.mods.fml.common.network.simpleimpl.MessageContext;
import io.netty.buffer.ByteBuf;
import net.minecraft.nbt.CompressedStreamTools;
import net.minecraft.nbt.NBTTagCompound;
import java.io.ByteArrayInputStream;
import java.io.IOException;
public class MessageEnergyValueSync implements IMessage, IMessageHandler<MessageEnergyValueSync, IMessage>
{
public NBTTagCompound energyValueRegistryNBT;
public MessageEnergyValueSync()
{
}
public MessageEnergyValueSync(EnergyValueRegistry energyValueRegistry)
{
energyValueRegistryNBT = new NBTTagCompound();
energyValueRegistry.writeToNBT(energyValueRegistryNBT);
}
/**
* Convert from the supplied buffer into your specific message type
*
* @param buf
*/
@Override
public void fromBytes(ByteBuf buf)
{
byte[] compressedNBT = null;
int readableBytes = buf.readInt();
if (readableBytes > 0)
{
compressedNBT = buf.readBytes(readableBytes).array();
}
if (compressedNBT != null)
{
try
{
this.energyValueRegistryNBT = CompressedStreamTools.readCompressed(new ByteArrayInputStream(compressedNBT));
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
/**
* Deconstruct your message into the supplied byte buffer
*
* @param buf
*/
@Override
public void toBytes(ByteBuf buf)
{
byte[] compressedNBT = null;
try
{
compressedNBT = CompressedStreamTools.compress(energyValueRegistryNBT);
}
catch (IOException e)
{
e.printStackTrace();
}
if (compressedNBT != null)
{
buf.writeInt(compressedNBT.length);
buf.writeBytes(compressedNBT);
}
else
{
buf.writeInt(0);
}
}
/**
* Called when a message is received of the appropriate type. You can optionally return a reply message, or null if no reply
* is needed.
*
* @param message The message
* @param ctx
* @return an optional return message
*/
@Override
public IMessage onMessage(MessageEnergyValueSync message, MessageContext ctx)
{
if (message.energyValueRegistryNBT != null)
{
EnergyValueRegistry.getInstance().readFromNBT(message.energyValueRegistryNBT);
LogHelper.info("Successfully received EnergyValues from server");
}
else
{
LogHelper.info("Failed to receive EnergyValues from server - falling back to local EnergyValues");
}
return null;
}
}

View file

@ -13,12 +13,14 @@ public abstract class CommonProxy implements IProxy
{
ItemEventHandler itemEventHandler = new ItemEventHandler();
CraftingHandler craftingHandler = new CraftingHandler();
PlayerEventHandler playerEventHandler = new PlayerEventHandler();
FMLCommonHandler.instance().bus().register(new ConfigurationHandler());
FMLCommonHandler.instance().bus().register(itemEventHandler);
MinecraftForge.EVENT_BUS.register(itemEventHandler);
MinecraftForge.EVENT_BUS.register(new WorldEventHandler());
MinecraftForge.EVENT_BUS.register(new PlayerEventHandler());
MinecraftForge.EVENT_BUS.register(playerEventHandler);
FMLCommonHandler.instance().bus().register(playerEventHandler);
FMLCommonHandler.instance().bus().register(craftingHandler);
MinecraftForge.EVENT_BUS.register(craftingHandler);
}