Advertisement
Guest User

Untitled

a guest
Jan 14th, 2016
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.73 KB | None | 0 0
  1. package test
  2.  
  3. import io.netty.buffer.ByteBuf;
  4. import net.minecraft.entity.player.EntityPlayerMP;
  5. import net.minecraft.item.ItemStack;
  6. import net.minecraft.nbt.NBTTagCompound;
  7. import net.minecraft.util.BlockPos;
  8. import net.minecraftforge.common.MinecraftForge;
  9. import net.minecraftforge.event.entity.player.ArrowLooseEvent;
  10. import net.minecraftforge.event.entity.player.PlayerInteractEvent;
  11. import net.minecraftforge.fml.common.Mod;
  12. import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
  13. import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
  14. import net.minecraftforge.fml.common.network.ByteBufUtils;
  15. import net.minecraftforge.fml.common.network.NetworkRegistry;
  16. import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
  17. import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler;
  18. import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;
  19. import net.minecraftforge.fml.common.network.simpleimpl.SimpleNetworkWrapper;
  20. import net.minecraftforge.fml.relauncher.Side;
  21.  
  22. import java.util.Arrays;
  23.  
  24. @Mod(modid = "test")
  25. public class TestChannel {
  26.  
  27.     @Mod.Instance
  28.     public static TestChannel instance;
  29.  
  30.     public static SimpleNetworkWrapper net;
  31.  
  32.     @Mod.EventHandler
  33.     public void preinit(FMLPreInitializationEvent evt) {
  34.         net = new SimpleNetworkWrapper("test");
  35.         net.registerMessage(PacketZeroHandler.class, PacketZero.class, 0, Side.CLIENT);
  36.         net.registerMessage(PacketOneHandler.class, PacketOne.class, 1, Side.CLIENT);
  37.         MinecraftForge.EVENT_BUS.register(this);
  38.     }
  39.  
  40.     // Send a packetZero to the client by firing an arrow
  41.     @SubscribeEvent
  42.     public void packetZero(ArrowLooseEvent evt) {
  43.         if (!evt.entityPlayer.worldObj.isRemote) {
  44.             net.sendTo(new PacketZero(123456789L, new BlockPos(evt.entityPlayer), new int[] { 1, 2, 3, 4 }), ((EntityPlayerMP) evt.entityPlayer));
  45.         }
  46.     }
  47.  
  48.     // Send a packetOne to the client by hitting a block with an enchnated sword
  49.     @SubscribeEvent
  50.     public void packetOne(PlayerInteractEvent evt) {
  51.         if (!evt.entityPlayer.worldObj.isRemote
  52.                 && evt.entityPlayer.getHeldItem() != null
  53.                 && evt.entityPlayer.getHeldItem().hasTagCompound()
  54.                 && evt.action == PlayerInteractEvent.Action.LEFT_CLICK_BLOCK) {
  55.             // Using sendToAllAround crashes all nearby lan connected clients regardless of who sent the packet
  56.             net.sendToAllAround(new PacketOne(evt.entityPlayer.getHeldItem().getTagCompound(), (short) 1234, evt.entityPlayer.getHeldItem()),
  57.                     new NetworkRegistry.TargetPoint(evt.entityPlayer.worldObj.provider.getDimensionId(), evt.entityPlayer.posX, evt.entityPlayer.posY, evt.entityPlayer.posZ, 32));
  58.  
  59.             // Using sendTo doesn't crash anyone
  60.             // net.sendTo(new PacketOne(evt.entityPlayer.getHeldItem().getTagCompound(), (short) 1234, evt.entityPlayer.getHeldItem()), ((EntityPlayerMP) evt.entityPlayer));
  61.         }
  62.     }
  63.  
  64.     public static class PacketZero implements IMessage {
  65.  
  66.         private long value;
  67.         private BlockPos pos;
  68.         private int[] ints;
  69.  
  70.         public PacketZero() {}
  71.  
  72.         public PacketZero(long val, BlockPos pos, int[] ints) {
  73.             this.value = val;
  74.             this.pos = pos;
  75.             this.ints = ints;
  76.         }
  77.  
  78.         @Override
  79.         public void fromBytes(ByteBuf buf) {
  80.             value = buf.readLong();
  81.             pos = BlockPos.fromLong(buf.readLong());
  82.  
  83.             int values = buf.readInt();
  84.             ints = new int[values];
  85.             for (int i = 0; i < values; i++) {
  86.                 ints[i] = buf.readInt();
  87.             }
  88.         }
  89.  
  90.         @Override
  91.         public void toBytes(ByteBuf buf) {
  92.             buf.writeLong(value);
  93.             buf.writeLong(pos.toLong());
  94.             buf.writeInt(ints.length);
  95.             Arrays.stream(ints).forEach(buf::writeInt);
  96.         }
  97.  
  98.         @Override
  99.         public String toString() {
  100.             return String.format("PacketZero[%d, %s, %s]", value, pos.toString(), Arrays.toString(ints));
  101.         }
  102.  
  103.     }
  104.  
  105.     public static class PacketZeroHandler implements IMessageHandler<PacketZero, IMessage> {
  106.  
  107.         @Override
  108.         public IMessage onMessage(PacketZero message, MessageContext ctx) {
  109.             System.out.println("Calling PacketZero handler");
  110.             System.out.println(message);
  111.             return null;
  112.         }
  113.  
  114.     }
  115.  
  116.     public static class PacketOne implements IMessage {
  117.  
  118.         private NBTTagCompound tag;
  119.         private short value;
  120.         private ItemStack stack;
  121.  
  122.         public PacketOne() {}
  123.  
  124.         public PacketOne(NBTTagCompound tag, short val, ItemStack stack) {
  125.             this.tag = tag;
  126.             this.value = val;
  127.             this.stack = stack;
  128.         }
  129.  
  130.         @Override
  131.         public void fromBytes(ByteBuf buf) {
  132.             tag = ByteBufUtils.readTag(buf);
  133.             value = buf.readShort();
  134.             stack = ByteBufUtils.readItemStack(buf);
  135.         }
  136.  
  137.         @Override
  138.         public void toBytes(ByteBuf buf) {
  139.             ByteBufUtils.writeTag(buf, tag);
  140.             buf.writeShort(value);
  141.             ByteBufUtils.writeItemStack(buf, stack);
  142.         }
  143.  
  144.         @Override
  145.         public String toString() {
  146.             return String.format("PacketOne[%s, %d, %s]", tag.toString(), value, stack.toString());
  147.         }
  148.  
  149.     }
  150.  
  151.     public static class PacketOneHandler implements IMessageHandler<PacketOne, IMessage> {
  152.  
  153.         @Override
  154.         public IMessage onMessage(PacketOne message, MessageContext ctx) {
  155.             System.out.println("Calling PacketOne handler");
  156.             System.out.println(message);
  157.             return null;
  158.         }
  159.  
  160.     }
  161.  
  162. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement