Skip to content

Instantly share code, notes, and snippets.

@TheGreyGhost
Created May 31, 2015 08:24
Show Gist options
  • Save TheGreyGhost/0e7b5e1d0a868ce311a0 to your computer and use it in GitHub Desktop.
Save TheGreyGhost/0e7b5e1d0a868ce311a0 to your computer and use it in GitHub Desktop.
Race condition in SimpleNetworkWrapper
package racecheck;
import io.netty.buffer.ByteBuf;
import net.minecraft.client.Minecraft;
import net.minecraft.client.multiplayer.WorldClient;
import net.minecraft.util.EnumParticleTypes;
import net.minecraft.util.Vec3;
import net.minecraftforge.fml.common.FMLCommonHandler;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.Mod.EventHandler;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.gameevent.TickEvent;
import net.minecraftforge.fml.common.network.NetworkRegistry;
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler;
import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;
import net.minecraftforge.fml.common.network.simpleimpl.SimpleNetworkWrapper;
import net.minecraftforge.fml.common.registry.GameRegistry;
import net.minecraftforge.fml.relauncher.Side;
import java.util.Random;
@Mod(modid = RaceCheck.MODID, version = RaceCheck.VERSION)
public class RaceCheck
{
public static final String MODID = "racecheck";
public static final String VERSION = "1.0";
public static SimpleNetworkWrapper simpleNetworkWrapper; // used to transmit your network messages
public static final byte CLIENT_MESSAGE_ID = 63;
@EventHandler
public void init(FMLInitializationEvent event)
{
simpleNetworkWrapper = NetworkRegistry.INSTANCE.newSimpleChannel("racecheckchannel");
simpleNetworkWrapper.registerMessage(MessageHandlerOnClient.class, MessageToClient.class,
CLIENT_MESSAGE_ID, Side.CLIENT);
FMLCommonHandler.instance().bus().register(new TickingHandler());
}
public static class MessageToClient implements IMessage
{
public MessageToClient()
{
}
public MessageToClient(int i_identifier)
{
identifier = i_identifier;
}
@Override
public void fromBytes(ByteBuf buf)
{
int startReaderIndex = buf.readerIndex();
byte startChar = buf.readByte();
identifier = buf.readInt();
byte lastChar = buf.readByte();
System.out.println("fromBytes id=" + identifier
+ "; initialReaderIndex = " + startReaderIndex
+ "; finalReaderIndex = " + buf.readerIndex());
}
@Override
public void toBytes(ByteBuf buf)
{
int startWriterIndex = buf.writerIndex();
buf.writeByte(100);
buf.writeInt(identifier);
buf.writeByte(101);
System.out.println("toBytes id=" + identifier
+ "; initialReaderIndex = " + startWriterIndex
+ "; finalReaderIndex = " + buf.writerIndex());
}
public int identifier;
}
public static class MessageHandlerOnClient implements IMessageHandler<MessageToClient, IMessage>
{
public IMessage onMessage(final MessageToClient message, MessageContext ctx) {
System.out.println("onMessage #=" + message.identifier);
return null;
}
}
public static class TickingHandler {
@SubscribeEvent
public void tickEnd(TickEvent.ServerTickEvent serverTickEvent)
{
if (serverTickEvent.phase == TickEvent.Phase.END) {
if (nextID++ %100 == 0) {
simpleNetworkWrapper.sendToDimension(new MessageToClient(nextID), 0);
}
}
}
static int nextID = 0;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment