Created
May 31, 2015 08:24
-
-
Save TheGreyGhost/0e7b5e1d0a868ce311a0 to your computer and use it in GitHub Desktop.
Race condition in SimpleNetworkWrapper
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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