TModLoader v1.4.4.9
TModLoader source code documentation
Loading...
Searching...
No Matches

◆ PlaceThing_Tiles_BlockPlacementForAssortedThings()

bool Terraria.Player.PlaceThing_Tiles_BlockPlacementForAssortedThings ( bool canPlace)
inlineprivate

Definition at line 39807 of file Player.cs.

39808 {
39809 bool flag = inventory[selectedItem].type == 213 || inventory[selectedItem].type == 5295;
39810 if (flag)
39811 {
39812 if (Main.tile[tileTargetX, tileTargetY].type == 0 || Main.tile[tileTargetX, tileTargetY].type == 1 || Main.tile[tileTargetX, tileTargetY].type == 38)
39813 {
39814 canPlace = true;
39815 }
39816 }
39817 else if (inventory[selectedItem].createTile == 2 || inventory[selectedItem].createTile == 109)
39818 {
39819 if (Main.tile[tileTargetX, tileTargetY].nactive() && Main.tile[tileTargetX, tileTargetY].type == 0)
39820 {
39821 canPlace = true;
39822 }
39823 }
39824 else if (inventory[selectedItem].createTile == 23 || inventory[selectedItem].createTile == 199)
39825 {
39826 if (Main.tile[tileTargetX, tileTargetY].nactive())
39827 {
39828 if (Main.tile[tileTargetX, tileTargetY].type == 0)
39829 {
39830 canPlace = true;
39831 }
39832 else if (Main.tile[tileTargetX, tileTargetY].type == 59)
39833 {
39834 canPlace = true;
39835 }
39836 }
39837 }
39838 else if (inventory[selectedItem].createTile == 227)
39839 {
39840 canPlace = true;
39841 }
39842 else if (inventory[selectedItem].createTile >= 373 && inventory[selectedItem].createTile <= 375)
39843 {
39844 int num = tileTargetX;
39845 int num2 = tileTargetY - 1;
39846 if (Main.tile[num, num2].nactive() && Main.tileSolid[Main.tile[num, num2].type] && !Main.tileSolidTop[Main.tile[num, num2].type])
39847 {
39848 canPlace = true;
39849 }
39850 }
39851 else if (inventory[selectedItem].createTile == 461)
39852 {
39853 int num3 = tileTargetX;
39854 int num4 = tileTargetY - 1;
39855 if (Main.tile[num3, num4].nactive() && Main.tileSolid[Main.tile[num3, num4].type] && !Main.tileSolidTop[Main.tile[num3, num4].type])
39856 {
39857 canPlace = true;
39858 }
39859 }
39860 else if (inventory[selectedItem].createTile == 60 || inventory[selectedItem].createTile == 70 || inventory[selectedItem].createTile == 661 || inventory[selectedItem].createTile == 662)
39861 {
39862 if (Main.tile[tileTargetX, tileTargetY].nactive() && Main.tile[tileTargetX, tileTargetY].type == 59)
39863 {
39864 canPlace = true;
39865 }
39866 }
39868 {
39869 if (Main.tile[tileTargetX, tileTargetY].wall > 0)
39870 {
39871 canPlace = true;
39872 }
39873 else
39874 {
39875 if (!WorldGen.SolidTileNoAttach(tileTargetX, tileTargetY + 1) && !WorldGen.SolidTileNoAttach(tileTargetX - 1, tileTargetY) && !WorldGen.SolidTileNoAttach(tileTargetX + 1, tileTargetY))
39876 {
39877 if (!WorldGen.SolidTileNoAttach(tileTargetX, tileTargetY + 1) && (Main.tile[tileTargetX, tileTargetY + 1].halfBrick() || Main.tile[tileTargetX, tileTargetY + 1].slope() != 0))
39878 {
39879 if (!TileID.Sets.Platforms[Main.tile[tileTargetX, tileTargetY + 1].type])
39880 {
39881 WorldGen.SlopeTile(tileTargetX, tileTargetY + 1);
39882 if (Main.netMode == 1)
39883 {
39884 NetMessage.SendData(17, -1, -1, null, 14, tileTargetX, tileTargetY + 1);
39885 }
39886 }
39887 }
39888 else if (!WorldGen.SolidTileNoAttach(tileTargetX, tileTargetY + 1) && !WorldGen.SolidTileNoAttach(tileTargetX - 1, tileTargetY) && (Main.tile[tileTargetX - 1, tileTargetY].halfBrick() || Main.tile[tileTargetX - 1, tileTargetY].slope() != 0))
39889 {
39890 if (!TileID.Sets.Platforms[Main.tile[tileTargetX - 1, tileTargetY].type])
39891 {
39892 WorldGen.SlopeTile(tileTargetX - 1, tileTargetY);
39893 if (Main.netMode == 1)
39894 {
39895 NetMessage.SendData(17, -1, -1, null, 14, tileTargetX - 1, tileTargetY);
39896 }
39897 }
39898 }
39899 else if (!WorldGen.SolidTileNoAttach(tileTargetX, tileTargetY + 1) && !WorldGen.SolidTileNoAttach(tileTargetX + 1, tileTargetY) && (Main.tile[tileTargetX + 1, tileTargetY].halfBrick() || Main.tile[tileTargetX + 1, tileTargetY].slope() != 0) && !TileID.Sets.Platforms[Main.tile[tileTargetX + 1, tileTargetY].type])
39900 {
39901 WorldGen.SlopeTile(tileTargetX + 1, tileTargetY);
39902 if (Main.netMode == 1)
39903 {
39904 NetMessage.SendData(17, -1, -1, null, 14, tileTargetX + 1, tileTargetY);
39905 }
39906 }
39907 }
39908 int num5 = Main.tile[tileTargetX, tileTargetY + 1].type;
39909 if (Main.tile[tileTargetX, tileTargetY].halfBrick())
39910 {
39911 num5 = -1;
39912 }
39913 int num6 = Main.tile[tileTargetX - 1, tileTargetY].type;
39914 int num7 = Main.tile[tileTargetX + 1, tileTargetY].type;
39915 int tree = Main.tile[tileTargetX - 1, tileTargetY - 1].type;
39916 int tree2 = Main.tile[tileTargetX + 1, tileTargetY - 1].type;
39917 int tree3 = Main.tile[tileTargetX - 1, tileTargetY - 1].type;
39918 int tree4 = Main.tile[tileTargetX + 1, tileTargetY + 1].type;
39919 if (!Main.tile[tileTargetX, tileTargetY + 1].nactive())
39920 {
39921 num5 = -1;
39922 }
39923 if (!Main.tile[tileTargetX - 1, tileTargetY].nactive())
39924 {
39925 num6 = -1;
39926 }
39927 if (!Main.tile[tileTargetX + 1, tileTargetY].nactive())
39928 {
39929 num7 = -1;
39930 }
39931 if (!Main.tile[tileTargetX - 1, tileTargetY - 1].nactive())
39932 {
39933 tree = -1;
39934 }
39935 if (!Main.tile[tileTargetX + 1, tileTargetY - 1].nactive())
39936 {
39937 tree2 = -1;
39938 }
39939 if (!Main.tile[tileTargetX - 1, tileTargetY + 1].nactive())
39940 {
39941 tree3 = -1;
39942 }
39943 if (!Main.tile[tileTargetX + 1, tileTargetY + 1].nactive())
39944 {
39945 tree4 = -1;
39946 }
39947 if (num5 >= 0 && Main.tileSolid[num5] && (!Main.tileNoAttach[num5] || (num5 >= 0 && TileID.Sets.Platforms[num5])))
39948 {
39949 canPlace = true;
39950 }
39951 else if ((num6 >= 0 && Main.tileSolid[num6] && !Main.tileNoAttach[num6]) || (WorldGen.IsTreeType(num6) && WorldGen.IsTreeType(tree) && WorldGen.IsTreeType(tree3)) || (num6 >= 0 && TileID.Sets.IsBeam[num6]))
39952 {
39953 canPlace = true;
39954 }
39955 else if ((num7 >= 0 && Main.tileSolid[num7] && !Main.tileNoAttach[num7]) || (WorldGen.IsTreeType(num7) && WorldGen.IsTreeType(tree2) && WorldGen.IsTreeType(tree4)) || (num7 >= 0 && TileID.Sets.IsBeam[num7]))
39956 {
39957 canPlace = true;
39958 }
39959 }
39960 }
39961 else if (inventory[selectedItem].createTile == 78 || inventory[selectedItem].createTile == 98 || inventory[selectedItem].createTile == 100 || inventory[selectedItem].createTile == 173 || inventory[selectedItem].createTile == 174 || inventory[selectedItem].createTile == 324)
39962 {
39963 if (Main.tile[tileTargetX, tileTargetY + 1].nactive() && (Main.tileSolid[Main.tile[tileTargetX, tileTargetY + 1].type] || Main.tileTable[Main.tile[tileTargetX, tileTargetY + 1].type]))
39964 {
39965 canPlace = true;
39966 }
39967 }
39968 else if (inventory[selectedItem].createTile == 419)
39969 {
39970 if (Main.tile[tileTargetX, tileTargetY + 1].active() && (Main.tile[tileTargetX, tileTargetY + 1].type == 419 || (inventory[selectedItem].placeStyle != 2 && Main.tile[tileTargetX, tileTargetY + 1].type == 420)))
39971 {
39972 canPlace = true;
39973 }
39974 }
39975 else if (inventory[selectedItem].createTile == 13 || inventory[selectedItem].createTile == 29 || inventory[selectedItem].createTile == 33 || inventory[selectedItem].createTile == 49 || inventory[selectedItem].createTile == 50 || inventory[selectedItem].createTile == 103)
39976 {
39977 if (Main.tile[tileTargetX, tileTargetY + 1].nactive() && Main.tileTable[Main.tile[tileTargetX, tileTargetY + 1].type])
39978 {
39979 canPlace = true;
39980 }
39981 }
39982 else if (inventory[selectedItem].createTile == 275 || inventory[selectedItem].createTile == 276 || inventory[selectedItem].createTile == 277)
39983 {
39984 canPlace = true;
39985 }
39987 {
39988 if (Main.tile[tileTargetX + 1, tileTargetY].active() || Main.tile[tileTargetX + 1, tileTargetY].wall > 0 || Main.tile[tileTargetX - 1, tileTargetY].active() || Main.tile[tileTargetX - 1, tileTargetY].wall > 0 || Main.tile[tileTargetX, tileTargetY + 1].active() || Main.tile[tileTargetX, tileTargetY + 1].wall > 0 || Main.tile[tileTargetX, tileTargetY - 1].active() || Main.tile[tileTargetX, tileTargetY - 1].wall > 0)
39989 {
39990 canPlace = true;
39991 }
39992 }
39993 else if (inventory[selectedItem].createTile == 314)
39994 {
39995 for (int i = tileTargetX - 1; i <= tileTargetX + 1; i++)
39996 {
39997 for (int j = tileTargetY - 1; j <= tileTargetY + 1; j++)
39998 {
39999 Tile tile = Main.tile[i, j];
40000 if (tile.active() || tile.wall > 0)
40001 {
40002 canPlace = true;
40003 break;
40004 }
40005 }
40006 }
40007 }
40008 else
40009 {
40010 Tile tile2 = Main.tile[tileTargetX - 1, tileTargetY];
40011 Tile tile3 = Main.tile[tileTargetX + 1, tileTargetY];
40012 Tile tile4 = Main.tile[tileTargetX, tileTargetY - 1];
40013 Tile tile5 = Main.tile[tileTargetX, tileTargetY + 1];
40014 if ((tile3.active() && (Main.tileSolid[tile3.type] || TileID.Sets.IsBeam[tile3.type] || Main.tileRope[tile3.type] || tile3.type == 314)) || tile3.wall > 0 || (tile2.active() && (Main.tileSolid[tile2.type] || TileID.Sets.IsBeam[tile2.type] || Main.tileRope[tile2.type] || tile2.type == 314)) || tile2.wall > 0 || (tile5.active() && (Main.tileSolid[tile5.type] || TileID.Sets.IsBeam[tile5.type] || Main.tileRope[tile5.type] || tile5.type == 314)) || tile5.wall > 0 || (tile4.active() && (Main.tileSolid[tile4.type] || TileID.Sets.IsBeam[tile4.type] || Main.tileRope[tile4.type] || tile4.type == 314)) || tile4.wall > 0)
40015 {
40016 canPlace = true;
40017 }
40018 else if (Main.tile[tileTargetX, tileTargetY].wall > 0)
40019 {
40020 canPlace = true;
40021 }
40022 }
40023 if (flag && Main.tile[tileTargetX, tileTargetY].active())
40024 {
40025 int num8 = tileTargetX;
40026 int num9 = tileTargetY;
40027 if (Main.tile[num8, num9].type == 3 || Main.tile[num8, num9].type == 73 || Main.tile[num8, num9].type == 84)
40028 {
40029 WorldGen.KillTile(tileTargetX, tileTargetY);
40030 if (!Main.tile[tileTargetX, tileTargetY].active() && Main.netMode == 1)
40031 {
40032 NetMessage.SendData(17, -1, -1, null, 0, tileTargetX, tileTargetY);
40033 }
40034 }
40035 else if (Main.tile[num8, num9].type == 83)
40036 {
40037 bool flag2 = false;
40038 int num10 = Main.tile[num8, num9].frameX / 18;
40039 if (num10 == 0 && Main.dayTime)
40040 {
40041 flag2 = true;
40042 }
40043 if (num10 == 1 && !Main.dayTime)
40044 {
40045 flag2 = true;
40046 }
40047 if (num10 == 3 && !Main.dayTime && (Main.bloodMoon || Main.moonPhase == 0))
40048 {
40049 flag2 = true;
40050 }
40051 if (num10 == 4 && (Main.raining || Main.cloudAlpha > 0f))
40052 {
40053 flag2 = true;
40054 }
40055 if (num10 == 5 && !Main.raining && Main.dayTime && Main.time > 40500.0)
40056 {
40057 flag2 = true;
40058 }
40059 if (flag2)
40060 {
40061 WorldGen.KillTile(tileTargetX, tileTargetY);
40062 NetMessage.SendData(17, -1, -1, null, 0, tileTargetX, tileTargetY);
40063 }
40064 }
40065 }
40066 if (Main.tileAlch[inventory[selectedItem].createTile])
40067 {
40068 canPlace = true;
40069 }
40070 if (Main.tile[tileTargetX, tileTargetY].active() && (Main.tileCut[Main.tile[tileTargetX, tileTargetY].type] || TileID.Sets.BreakableWhenPlacing[Main.tile[tileTargetX, tileTargetY].type] || (Main.tile[tileTargetX, tileTargetY].type >= 373 && Main.tile[tileTargetX, tileTargetY].type <= 375) || Main.tile[tileTargetX, tileTargetY].type == 461))
40071 {
40072 if (Main.tile[tileTargetX, tileTargetY].type != inventory[selectedItem].createTile)
40073 {
40074 bool num11 = Main.tile[tileTargetX, tileTargetY + 1].type != 78 && Main.tile[tileTargetX, tileTargetY + 1].type != 380 && Main.tile[tileTargetX, tileTargetY + 1].type != 579;
40075 bool flag3 = Main.tile[tileTargetX, tileTargetY].type == 3 || Main.tile[tileTargetX, tileTargetY].type == 73;
40076 bool flag4 = Main.tileAlch[Main.tile[tileTargetX, tileTargetY].type] && WorldGen.IsHarvestableHerbWithSeed(Main.tile[tileTargetX, tileTargetY].type, Main.tile[tileTargetX, tileTargetY].frameX / 18);
40077 bool flag5 = Main.tileAlch[inventory[selectedItem].createTile];
40078 if (num11 || ((flag3 || flag4) && flag5))
40079 {
40080 WorldGen.KillTile(tileTargetX, tileTargetY);
40081 if (!Main.tile[tileTargetX, tileTargetY].active() && Main.netMode == 1)
40082 {
40083 NetMessage.SendData(17, -1, -1, null, 0, tileTargetX, tileTargetY);
40084 }
40085 }
40086 else
40087 {
40088 canPlace = false;
40089 }
40090 }
40091 else
40092 {
40093 canPlace = false;
40094 }
40095 }
40097 {
40098 for (int k = tileTargetX - 1; k <= tileTargetX + 1; k++)
40099 {
40100 for (int l = tileTargetY - 1; l <= tileTargetY + 1; l++)
40101 {
40102 if (Main.tile[k, l].active())
40103 {
40104 canPlace = true;
40105 break;
40106 }
40107 }
40108 }
40109 }
40110 if (inventory[selectedItem].createTile == 3)
40111 {
40112 canPlace = WorldGen.IsFitToPlaceFlowerIn(tileTargetX, tileTargetY, 3);
40113 if (canPlace)
40114 {
40115 WorldGen.KillTile(tileTargetX, tileTargetY);
40116 if (Main.netMode == 1 && !Main.tile[tileTargetX, tileTargetY].active())
40117 {
40118 NetMessage.SendData(17, -1, -1, null, 0, tileTargetX, tileTargetY);
40119 }
40120 }
40121 }
40122 return canPlace;
40123 }
static bool[] CanPlaceNextToNonSolidTile
Allows tiles to be placed next to any tile or wall. (Tiles normally need a F:Terraria....
Definition TileID.cs:487
static bool[] BreakableWhenPlacing
Definition TileID.cs:344
static bool[] IsBeam
Definition TileID.cs:217
static bool[] Platforms
Definition TileID.cs:219
static bool[] Torch
Whether or not this tile behaves like a torch. If you are making a torch tile, then setting this to t...
Definition TileID.cs:428
int createTile
The ID of the tile this item places on use. Either a T:Terraria.ID.TileID entry or M:Terraria....
Definition Item.cs:435
int placeStyle
The style of the tile being placed. Used for tiles that have a different look depending on the item u...
Definition Item.cs:448
int type
The Item ID of this item. The Item ID is a unique number assigned to each Item loaded into the game....
Definition Item.cs:345
static int tileTargetY
Definition Player.cs:2652
static int tileTargetX
Definition Player.cs:2650
Item[] inventory
The player's normal inventory. Indexes 0-9 hold the hotbar items, 10-49 the rest of the main inventor...
Definition Player.cs:1767

References Terraria.Tile.active(), Terraria.Main.bloodMoon, Terraria.ID.TileID.Sets.BreakableWhenPlacing, Terraria.ID.TileID.Sets.CanPlaceNextToNonSolidTile, Terraria.Main.cloudAlpha, Terraria.Item.createTile, Terraria.Main.dayTime, Terraria.Player.inventory, Terraria.ID.TileID.Sets.IsBeam, Terraria.WorldGen.IsFitToPlaceFlowerIn(), Terraria.WorldGen.IsHarvestableHerbWithSeed(), Terraria.WorldGen.IsTreeType(), Terraria.WorldGen.KillTile(), Terraria.Main.moonPhase, Terraria.Main.netMode, Terraria.Item.placeStyle, Terraria.ID.TileID.Sets.Platforms, Terraria.Main.raining, Terraria.Player.selectedItem, Terraria.NetMessage.SendData(), Terraria.WorldGen.SlopeTile(), Terraria.WorldGen.SolidTileNoAttach(), Terraria.Main.tile, Terraria.Main.tileAlch, Terraria.Main.tileCut, Terraria.Main.tileNoAttach, Terraria.Main.tileRope, Terraria.Main.tileSolid, Terraria.Main.tileSolidTop, Terraria.Main.tileTable, Terraria.Player.tileTargetX, Terraria.Player.tileTargetY, Terraria.Main.time, Terraria.ID.TileID.Sets.Torch, Terraria.Item.type, and Terraria.Tile.wall.

Referenced by Terraria.Player.PlaceThing_Tiles().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: