Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package test
- import io.netty.buffer.ByteBuf;
- import net.minecraft.entity.player.EntityPlayerMP;
- import net.minecraft.item.ItemStack;
- import net.minecraft.nbt.NBTTagCompound;
- import net.minecraft.util.BlockPos;
- import net.minecraftforge.common.MinecraftForge;
- import net.minecraftforge.event.entity.player.ArrowLooseEvent;
- import net.minecraftforge.event.entity.player.PlayerInteractEvent;
- import net.minecraftforge.fml.common.Mod;
- import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
- import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
- import net.minecraftforge.fml.common.network.ByteBufUtils;
- 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.relauncher.Side;
- import java.util.Arrays;
- @Mod(modid = "test")
- public class TestChannel {
- @Mod.Instance
- public static TestChannel instance;
- public static SimpleNetworkWrapper net;
- @Mod.EventHandler
- public void preinit(FMLPreInitializationEvent evt) {
- net = new SimpleNetworkWrapper("test");
- net.registerMessage(PacketZeroHandler.class, PacketZero.class, 0, Side.CLIENT);
- net.registerMessage(PacketOneHandler.class, PacketOne.class, 1, Side.CLIENT);
- MinecraftForge.EVENT_BUS.register(this);
- }
- // Send a packetZero to the client by firing an arrow
- @SubscribeEvent
- public void packetZero(ArrowLooseEvent evt) {
- if (!evt.entityPlayer.worldObj.isRemote) {
- net.sendTo(new PacketZero(123456789L, new BlockPos(evt.entityPlayer), new int[] { 1, 2, 3, 4 }), ((EntityPlayerMP) evt.entityPlayer));
- }
- }
- // Send a packetOne to the client by hitting a block with an enchnated sword
- @SubscribeEvent
- public void packetOne(PlayerInteractEvent evt) {
- if (!evt.entityPlayer.worldObj.isRemote
- && evt.entityPlayer.getHeldItem() != null
- && evt.entityPlayer.getHeldItem().hasTagCompound()
- && evt.action == PlayerInteractEvent.Action.LEFT_CLICK_BLOCK) {
- // Using sendToAllAround crashes all nearby lan connected clients regardless of who sent the packet
- net.sendToAllAround(new PacketOne(evt.entityPlayer.getHeldItem().getTagCompound(), (short) 1234, evt.entityPlayer.getHeldItem()),
- new NetworkRegistry.TargetPoint(evt.entityPlayer.worldObj.provider.getDimensionId(), evt.entityPlayer.posX, evt.entityPlayer.posY, evt.entityPlayer.posZ, 32));
- // Using sendTo doesn't crash anyone
- // net.sendTo(new PacketOne(evt.entityPlayer.getHeldItem().getTagCompound(), (short) 1234, evt.entityPlayer.getHeldItem()), ((EntityPlayerMP) evt.entityPlayer));
- }
- }
- public static class PacketZero implements IMessage {
- private long value;
- private BlockPos pos;
- private int[] ints;
- public PacketZero() {}
- public PacketZero(long val, BlockPos pos, int[] ints) {
- this.value = val;
- this.pos = pos;
- this.ints = ints;
- }
- @Override
- public void fromBytes(ByteBuf buf) {
- value = buf.readLong();
- pos = BlockPos.fromLong(buf.readLong());
- int values = buf.readInt();
- ints = new int[values];
- for (int i = 0; i < values; i++) {
- ints[i] = buf.readInt();
- }
- }
- @Override
- public void toBytes(ByteBuf buf) {
- buf.writeLong(value);
- buf.writeLong(pos.toLong());
- buf.writeInt(ints.length);
- Arrays.stream(ints).forEach(buf::writeInt);
- }
- @Override
- public String toString() {
- return String.format("PacketZero[%d, %s, %s]", value, pos.toString(), Arrays.toString(ints));
- }
- }
- public static class PacketZeroHandler implements IMessageHandler<PacketZero, IMessage> {
- @Override
- public IMessage onMessage(PacketZero message, MessageContext ctx) {
- System.out.println("Calling PacketZero handler");
- System.out.println(message);
- return null;
- }
- }
- public static class PacketOne implements IMessage {
- private NBTTagCompound tag;
- private short value;
- private ItemStack stack;
- public PacketOne() {}
- public PacketOne(NBTTagCompound tag, short val, ItemStack stack) {
- this.tag = tag;
- this.value = val;
- this.stack = stack;
- }
- @Override
- public void fromBytes(ByteBuf buf) {
- tag = ByteBufUtils.readTag(buf);
- value = buf.readShort();
- stack = ByteBufUtils.readItemStack(buf);
- }
- @Override
- public void toBytes(ByteBuf buf) {
- ByteBufUtils.writeTag(buf, tag);
- buf.writeShort(value);
- ByteBufUtils.writeItemStack(buf, stack);
- }
- @Override
- public String toString() {
- return String.format("PacketOne[%s, %d, %s]", tag.toString(), value, stack.toString());
- }
- }
- public static class PacketOneHandler implements IMessageHandler<PacketOne, IMessage> {
- @Override
- public IMessage onMessage(PacketOne message, MessageContext ctx) {
- System.out.println("Calling PacketOne handler");
- System.out.println(message);
- return null;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement