using Microsoft.Xna.Framework; using Newtonsoft.Json.Linq; using Newtonsoft.Json; using System.Collections.Generic; using System.Data; using Terraria; using Terraria.Audio; using Terraria.ID; using Terraria.Localization; using Terraria.ModLoader; using Terraria.ObjectData; using System.IO; using static System.Net.Mime.MediaTypeNames; using System; using Terraria.DataStructures; using Terraria.UI; namespace tTP.Content.Tiles { public class PersonalTeleporter : ModTile { public override void SetStaticDefaults() { Main.tileFrameImportant[Type] = true; Main.tileObsidianKill[Type] = true; Main.tileLighted[Type] = true; TileID.Sets.DisableSmartCursor[Type] = true; TileObjectData.newTile.CopyFrom(TileObjectData.Style3x2); TileObjectData.addTile(Type); } public override void ModifyLight(int i, int j, ref float r, ref float g, ref float b) { Tile tile = Main.tile[i, j]; if (tile.TileFrameY < 36) { float pulse = Main.rand.Next(28, 42) * 0.005f; pulse += (270 - Main.mouseTextColor) / 700f; r = 0.1f + pulse; g = 0.1f + pulse; b = 0.9f + pulse; } } public override void MouseOver(int i, int j) { Player player = Main.LocalPlayer; player.noThrow = 2; player.cursorItemIconEnabled = true; int style = TileObjectData.GetTileStyle(Main.tile[i, j]); player.cursorItemIconID = TileLoader.GetItemDropFromTypeAndStyle(Type, style); } public override bool RightClick(int i, int j) { return true; } public override void PlaceInWorld(int i, int j, Item item) { Player p = Main.LocalPlayer; tTP.table.Rows.Add(Biomes.GetBiome(p), i, j); Main.NewText($"[tTP] Added new TP: {Biomes.GetBiome(p)} x{i} y{j} ", Color.Aqua); List> rows = new List>(); Dictionary row; foreach (DataRow dr in tTP.table.Rows) { row = new Dictionary(); foreach (DataColumn col in tTP.table.Columns) { row.Add(col.ColumnName, dr[col]); } rows.Add(row); } string output = JsonConvert.SerializeObject(rows, Formatting.Indented); string prepjson = @"{ ""tp"":" + output + "}"; File.WriteAllText($"tTP/{tTP.worldName}.json", prepjson); } public override void KillTile(int i, int j, ref bool fail, ref bool effectOnly, ref bool noItem) { Player p = Main.LocalPlayer; Main.NewText($"[tTP] Removed a TP: {Biomes.GetBiome(p)} x{i} y{j} ", Color.Aqua); tTP.table.AcceptChanges(); foreach (DataRow tprow in tTP.table.Rows) { if (Convert.ToInt64(tprow["x"]) == i && Convert.ToInt64(tprow["y"]) == j) { tprow.Delete(); } } tTP.table.AcceptChanges(); List> rows = new List>(); Dictionary row; foreach (DataRow dr in tTP.table.Rows) { row = new Dictionary(); foreach (DataColumn col in tTP.table.Columns) { row.Add(col.ColumnName, dr[col]); } rows.Add(row); } string output = JsonConvert.SerializeObject(rows, Formatting.Indented); string prepjson = @"{ ""tp"":" + output + "}"; File.WriteAllText($"tTP/{tTP.worldName}.json", prepjson); } } }