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:
parent
04bdf72504
commit
7244bdedf6
4 changed files with 125 additions and 1 deletions
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue