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.Style2x2); 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 the torch is on if (tile.TileFrameX < 66) { int style = TileObjectData.GetTileStyle(Main.tile[i, j]); // Make it emit the following light. if (style == 0) { r = 0.9f; g = 0.9f; b = 0.9f; } else if (style == 1) { r = 0.5f; g = 1.5f; b = 0.5f; } } } 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); } } }