InanZen

Endless Blocks

Apr 2nd, 2012
478
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.60 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.IO;
  6. using Terraria;
  7. using TShockAPI;
  8. using Hooks;
  9.  
  10. namespace Endless_Blocks
  11. {
  12.     [APIVersion(1, 11)]
  13.     public class Endless_Blocks : TerrariaPlugin
  14.     {
  15.         public static List<int> playerList = new List<int>();
  16.         public override string Name
  17.         {
  18.             get { return "Endless Blocks"; }
  19.         }
  20.         public override string Author
  21.         {
  22.             get { return "by InanZen"; }
  23.         }
  24.         public override string Description
  25.         {
  26.             get { return "Never run out of building blocks"; }
  27.         }
  28.         public override Version Version
  29.         {
  30.             get { return new Version("1.0.0"); }
  31.         }
  32.         public override void Initialize()
  33.         {
  34.             NetHooks.GetData += GetData;
  35.             ServerHooks.Leave += OnLeave;
  36.  
  37.             Commands.ChatCommands.Add(new Command("canbuild", EndlessCommand, "endless"));
  38.         }
  39.         protected override void Dispose(bool disposing)
  40.         {
  41.             if (disposing)
  42.             {
  43.                 NetHooks.GetData -= GetData;
  44.                 ServerHooks.Leave -= OnLeave;
  45.             }
  46.             base.Dispose(disposing);
  47.         }
  48.         public Endless_Blocks(Main game)
  49.             : base(game)
  50.         {
  51.             Order = 5;
  52.         }
  53.         public void OnLeave(int who)
  54.         {
  55.             lock (playerList)
  56.             {
  57.                 playerList.Remove(who);
  58.             }
  59.         }
  60.         public void EndlessCommand(CommandArgs args)
  61.         {
  62.             if (args.Parameters.Count == 1)
  63.             {
  64.                 if (args.Parameters[0] == "off")
  65.                 {
  66.                     lock (playerList)
  67.                         playerList.Remove(args.Player.Index);
  68.                     args.Player.SendMessage("Endless Blocks disabled", Color.BurlyWood);
  69.                 }
  70.                 else if (args.Parameters[0] == "on")
  71.                 {
  72.                     lock (playerList)
  73.                     {
  74.                         if (!playerList.Contains(args.Player.Index))
  75.                             playerList.Add(args.Player.Index);
  76.                     }
  77.                     args.Player.SendMessage("Endless Blocks enabled", Color.BurlyWood);
  78.                 }
  79.             }
  80.             else
  81.             {
  82.                 lock (playerList)
  83.                 {
  84.                     if (playerList.Remove(args.Player.Index))
  85.                         args.Player.SendMessage("Endless Blocks disabled", Color.BurlyWood);
  86.                     else
  87.                     {
  88.                         playerList.Add(args.Player.Index);
  89.                         args.Player.SendMessage("Endless Blocks enabled", Color.BurlyWood);
  90.                     }
  91.                 }
  92.             }
  93.         }
  94.         public void GetData(GetDataEventArgs e)
  95.         {
  96.             if (e.MsgID == PacketTypes.Tile)
  97.             {
  98.                 byte type, tileType, style;
  99.                 Int32 x, y;
  100.                 bool fail;
  101.                 using (var data = new MemoryStream(e.Msg.readBuffer, e.Index, e.Length))
  102.                 {
  103.                     var reader = new BinaryReader(data);
  104.                     type = reader.ReadByte();
  105.                     x = reader.ReadInt32();
  106.                     y = reader.ReadInt32();
  107.                     tileType = reader.ReadByte();
  108.                     fail = reader.ReadBoolean();
  109.                     style = reader.ReadByte();
  110.                     reader.Close();
  111.                     reader.Dispose();
  112.                 }
  113.                 if ((type == 1 || type == 3) && playerList.Contains(e.Msg.whoAmI))
  114.                 {
  115.                     int count = 0;
  116.                     Item giveItem = null;
  117.                     foreach (Item item in TShock.Players[e.Msg.whoAmI].TPlayer.inventory)
  118.                     {
  119.                       //  Console.WriteLine("Item {0}, type: {1}, netid: {2}, createtile: {3}, createwall: {4}", item.name, item.type, item.netID, item.createTile, item.createWall);
  120.                         if ((type == 1 && item.createTile == tileType) || (type == 3 && item.createWall == tileType))
  121.                         {
  122.                             count += item.stack;
  123.                             giveItem = item;
  124.                         }
  125.                     }
  126.                     if (count < 10 && giveItem != null)
  127.                         TShock.Players[e.Msg.whoAmI].GiveItem(giveItem.type, giveItem.name, giveItem.width, giveItem.height, giveItem.maxStack-10);
  128.                 }
  129.             }
  130.         }
  131.     }
  132. }
Advertisement
Add Comment
Please, Sign In to add comment