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

◆ PlaceThing_Tiles_BlockPlacementForAssortedThings()

bool Terraria.Player.PlaceThing_Tiles_BlockPlacementForAssortedThings ( bool canPlace)
inlineprivate

Definition at line 38758 of file Player.cs.

38759 {
38760 bool flag = inventory[selectedItem].type == 213 || inventory[selectedItem].type == 5295;
38761 if (flag)
38762 {
38763 if (Main.tile[tileTargetX, tileTargetY].type == 0 || Main.tile[tileTargetX, tileTargetY].type == 1 || Main.tile[tileTargetX, tileTargetY].type == 38)
38764 {
38765 canPlace = true;
38766 }
38767 }
38768 else if (inventory[selectedItem].createTile == 2 || inventory[selectedItem].createTile == 109)
38769 {
38770 if (Main.tile[tileTargetX, tileTargetY].nactive() && Main.tile[tileTargetX, tileTargetY].type == 0)
38771 {
38772 canPlace = true;
38773 }
38774 }
38775 else if (inventory[selectedItem].createTile == 23 || inventory[selectedItem].createTile == 199)
38776 {
38777 if (Main.tile[tileTargetX, tileTargetY].nactive())
38778 {
38779 if (Main.tile[tileTargetX, tileTargetY].type == 0)
38780 {
38781 canPlace = true;
38782 }
38783 else if (Main.tile[tileTargetX, tileTargetY].type == 59)
38784 {
38785 canPlace = true;
38786 }
38787 }
38788 }
38789 else if (inventory[selectedItem].createTile == 227)
38790 {
38791 canPlace = true;
38792 }
38793 else if (inventory[selectedItem].createTile >= 373 && inventory[selectedItem].createTile <= 375)
38794 {
38795 int num = tileTargetX;
38796 int num2 = tileTargetY - 1;
38797 if (Main.tile[num, num2].nactive() && Main.tileSolid[Main.tile[num, num2].type] && !Main.tileSolidTop[Main.tile[num, num2].type])
38798 {
38799 canPlace = true;
38800 }
38801 }
38802 else if (inventory[selectedItem].createTile == 461)
38803 {
38804 int num3 = tileTargetX;
38805 int num4 = tileTargetY - 1;
38806 if (Main.tile[num3, num4].nactive() && Main.tileSolid[Main.tile[num3, num4].type] && !Main.tileSolidTop[Main.tile[num3, num4].type])
38807 {
38808 canPlace = true;
38809 }
38810 }
38811 else if (inventory[selectedItem].createTile == 60 || inventory[selectedItem].createTile == 70 || inventory[selectedItem].createTile == 661 || inventory[selectedItem].createTile == 662)
38812 {
38813 if (Main.tile[tileTargetX, tileTargetY].nactive() && Main.tile[tileTargetX, tileTargetY].type == 59)
38814 {
38815 canPlace = true;
38816 }
38817 }
38818 else if (inventory[selectedItem].createTile == 4 || inventory[selectedItem].createTile == 136)
38819 {
38820 if (Main.tile[tileTargetX, tileTargetY].wall > 0)
38821 {
38822 canPlace = true;
38823 }
38824 else
38825 {
38826 if (!WorldGen.SolidTileNoAttach(tileTargetX, tileTargetY + 1) && !WorldGen.SolidTileNoAttach(tileTargetX - 1, tileTargetY) && !WorldGen.SolidTileNoAttach(tileTargetX + 1, tileTargetY))
38827 {
38828 if (!WorldGen.SolidTileNoAttach(tileTargetX, tileTargetY + 1) && (Main.tile[tileTargetX, tileTargetY + 1].halfBrick() || Main.tile[tileTargetX, tileTargetY + 1].slope() != 0))
38829 {
38830 if (!TileID.Sets.Platforms[Main.tile[tileTargetX, tileTargetY + 1].type])
38831 {
38832 WorldGen.SlopeTile(tileTargetX, tileTargetY + 1);
38833 if (Main.netMode == 1)
38834 {
38835 NetMessage.SendData(17, -1, -1, null, 14, tileTargetX, tileTargetY + 1);
38836 }
38837 }
38838 }
38839 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))
38840 {
38841 if (!TileID.Sets.Platforms[Main.tile[tileTargetX - 1, tileTargetY].type])
38842 {
38843 WorldGen.SlopeTile(tileTargetX - 1, tileTargetY);
38844 if (Main.netMode == 1)
38845 {
38846 NetMessage.SendData(17, -1, -1, null, 14, tileTargetX - 1, tileTargetY);
38847 }
38848 }
38849 }
38850 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])
38851 {
38852 WorldGen.SlopeTile(tileTargetX + 1, tileTargetY);
38853 if (Main.netMode == 1)
38854 {
38855 NetMessage.SendData(17, -1, -1, null, 14, tileTargetX + 1, tileTargetY);
38856 }
38857 }
38858 }
38859 int num5 = Main.tile[tileTargetX, tileTargetY + 1].type;
38860 if (Main.tile[tileTargetX, tileTargetY].halfBrick())
38861 {
38862 num5 = -1;
38863 }
38864 int num6 = Main.tile[tileTargetX - 1, tileTargetY].type;
38865 int num7 = Main.tile[tileTargetX + 1, tileTargetY].type;
38866 int tree = Main.tile[tileTargetX - 1, tileTargetY - 1].type;
38867 int tree2 = Main.tile[tileTargetX + 1, tileTargetY - 1].type;
38868 int tree3 = Main.tile[tileTargetX - 1, tileTargetY - 1].type;
38869 int tree4 = Main.tile[tileTargetX + 1, tileTargetY + 1].type;
38870 if (!Main.tile[tileTargetX, tileTargetY + 1].nactive())
38871 {
38872 num5 = -1;
38873 }
38874 if (!Main.tile[tileTargetX - 1, tileTargetY].nactive())
38875 {
38876 num6 = -1;
38877 }
38878 if (!Main.tile[tileTargetX + 1, tileTargetY].nactive())
38879 {
38880 num7 = -1;
38881 }
38882 if (!Main.tile[tileTargetX - 1, tileTargetY - 1].nactive())
38883 {
38884 tree = -1;
38885 }
38886 if (!Main.tile[tileTargetX + 1, tileTargetY - 1].nactive())
38887 {
38888 tree2 = -1;
38889 }
38890 if (!Main.tile[tileTargetX - 1, tileTargetY + 1].nactive())
38891 {
38892 tree3 = -1;
38893 }
38894 if (!Main.tile[tileTargetX + 1, tileTargetY + 1].nactive())
38895 {
38896 tree4 = -1;
38897 }
38898 if (num5 >= 0 && Main.tileSolid[num5] && (!Main.tileNoAttach[num5] || (num5 >= 0 && TileID.Sets.Platforms[num5])))
38899 {
38900 canPlace = true;
38901 }
38902 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]))
38903 {
38904 canPlace = true;
38905 }
38906 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]))
38907 {
38908 canPlace = true;
38909 }
38910 }
38911 }
38912 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)
38913 {
38914 if (Main.tile[tileTargetX, tileTargetY + 1].nactive() && (Main.tileSolid[Main.tile[tileTargetX, tileTargetY + 1].type] || Main.tileTable[Main.tile[tileTargetX, tileTargetY + 1].type]))
38915 {
38916 canPlace = true;
38917 }
38918 }
38919 else if (inventory[selectedItem].createTile == 419)
38920 {
38921 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)))
38922 {
38923 canPlace = true;
38924 }
38925 }
38926 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)
38927 {
38928 if (Main.tile[tileTargetX, tileTargetY + 1].nactive() && Main.tileTable[Main.tile[tileTargetX, tileTargetY + 1].type])
38929 {
38930 canPlace = true;
38931 }
38932 }
38933 else if (inventory[selectedItem].createTile == 275 || inventory[selectedItem].createTile == 276 || inventory[selectedItem].createTile == 277)
38934 {
38935 canPlace = true;
38936 }
38937 else if (inventory[selectedItem].createTile == 51 || inventory[selectedItem].createTile == 330 || inventory[selectedItem].createTile == 331 || inventory[selectedItem].createTile == 332 || inventory[selectedItem].createTile == 333 || inventory[selectedItem].createTile == 336 || inventory[selectedItem].createTile == 340 || inventory[selectedItem].createTile == 342 || inventory[selectedItem].createTile == 341 || inventory[selectedItem].createTile == 343 || inventory[selectedItem].createTile == 344 || inventory[selectedItem].createTile == 379 || inventory[selectedItem].createTile == 351)
38938 {
38939 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)
38940 {
38941 canPlace = true;
38942 }
38943 }
38944 else if (inventory[selectedItem].createTile == 314)
38945 {
38946 for (int i = tileTargetX - 1; i <= tileTargetX + 1; i++)
38947 {
38948 for (int j = tileTargetY - 1; j <= tileTargetY + 1; j++)
38949 {
38950 Tile tile = Main.tile[i, j];
38951 if (tile.active() || tile.wall > 0)
38952 {
38953 canPlace = true;
38954 break;
38955 }
38956 }
38957 }
38958 }
38959 else
38960 {
38961 Tile tile2 = Main.tile[tileTargetX - 1, tileTargetY];
38962 Tile tile3 = Main.tile[tileTargetX + 1, tileTargetY];
38963 Tile tile4 = Main.tile[tileTargetX, tileTargetY - 1];
38964 Tile tile5 = Main.tile[tileTargetX, tileTargetY + 1];
38965 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)
38966 {
38967 canPlace = true;
38968 }
38969 else if (Main.tile[tileTargetX, tileTargetY].wall > 0)
38970 {
38971 canPlace = true;
38972 }
38973 }
38974 if (flag && Main.tile[tileTargetX, tileTargetY].active())
38975 {
38976 int num8 = tileTargetX;
38977 int num9 = tileTargetY;
38978 if (Main.tile[num8, num9].type == 3 || Main.tile[num8, num9].type == 73 || Main.tile[num8, num9].type == 84)
38979 {
38980 WorldGen.KillTile(tileTargetX, tileTargetY);
38981 if (!Main.tile[tileTargetX, tileTargetY].active() && Main.netMode == 1)
38982 {
38983 NetMessage.SendData(17, -1, -1, null, 0, tileTargetX, tileTargetY);
38984 }
38985 }
38986 else if (Main.tile[num8, num9].type == 83)
38987 {
38988 bool flag2 = false;
38989 int num10 = Main.tile[num8, num9].frameX / 18;
38990 if (num10 == 0 && Main.dayTime)
38991 {
38992 flag2 = true;
38993 }
38994 if (num10 == 1 && !Main.dayTime)
38995 {
38996 flag2 = true;
38997 }
38998 if (num10 == 3 && !Main.dayTime && (Main.bloodMoon || Main.moonPhase == 0))
38999 {
39000 flag2 = true;
39001 }
39002 if (num10 == 4 && (Main.raining || Main.cloudAlpha > 0f))
39003 {
39004 flag2 = true;
39005 }
39006 if (num10 == 5 && !Main.raining && Main.dayTime && Main.time > 40500.0)
39007 {
39008 flag2 = true;
39009 }
39010 if (flag2)
39011 {
39012 WorldGen.KillTile(tileTargetX, tileTargetY);
39013 NetMessage.SendData(17, -1, -1, null, 0, tileTargetX, tileTargetY);
39014 }
39015 }
39016 }
39017 if (Main.tileAlch[inventory[selectedItem].createTile])
39018 {
39019 canPlace = true;
39020 }
39021 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))
39022 {
39023 if (Main.tile[tileTargetX, tileTargetY].type != inventory[selectedItem].createTile)
39024 {
39025 bool num11 = Main.tile[tileTargetX, tileTargetY + 1].type != 78 && Main.tile[tileTargetX, tileTargetY + 1].type != 380 && Main.tile[tileTargetX, tileTargetY + 1].type != 579;
39026 bool flag3 = Main.tile[tileTargetX, tileTargetY].type == 3 || Main.tile[tileTargetX, tileTargetY].type == 73;
39027 bool flag4 = Main.tileAlch[Main.tile[tileTargetX, tileTargetY].type] && WorldGen.IsHarvestableHerbWithSeed(Main.tile[tileTargetX, tileTargetY].type, Main.tile[tileTargetX, tileTargetY].frameX / 18);
39028 bool flag5 = Main.tileAlch[inventory[selectedItem].createTile];
39029 if (num11 || ((flag3 || flag4) && flag5))
39030 {
39031 WorldGen.KillTile(tileTargetX, tileTargetY);
39032 if (!Main.tile[tileTargetX, tileTargetY].active() && Main.netMode == 1)
39033 {
39034 NetMessage.SendData(17, -1, -1, null, 0, tileTargetX, tileTargetY);
39035 }
39036 }
39037 else
39038 {
39039 canPlace = false;
39040 }
39041 }
39042 else
39043 {
39044 canPlace = false;
39045 }
39046 }
39048 {
39049 for (int k = tileTargetX - 1; k <= tileTargetX + 1; k++)
39050 {
39051 for (int l = tileTargetY - 1; l <= tileTargetY + 1; l++)
39052 {
39053 if (Main.tile[k, l].active())
39054 {
39055 canPlace = true;
39056 break;
39057 }
39058 }
39059 }
39060 }
39061 if (inventory[selectedItem].createTile == 3)
39062 {
39063 canPlace = WorldGen.IsFitToPlaceFlowerIn(tileTargetX, tileTargetY, 3);
39064 if (canPlace)
39065 {
39066 WorldGen.KillTile(tileTargetX, tileTargetY);
39067 if (Main.netMode == 1 && !Main.tile[tileTargetX, tileTargetY].active())
39068 {
39069 NetMessage.SendData(17, -1, -1, null, 0, tileTargetX, tileTargetY);
39070 }
39071 }
39072 }
39073 return canPlace;
39074 }
static bool[] BreakableWhenPlacing
Definition TileID.cs:277
static bool[] IsBeam
Definition TileID.cs:161
static bool[] Platforms
Definition TileID.cs:163
int createTile
Definition Item.cs:161
int placeStyle
Definition Item.cs:165
static int tileTargetY
Definition Player.cs:2085
static int tileTargetX
Definition Player.cs:2083
Item[] inventory
Definition Player.cs:1257

References Terraria.Tile.active(), Terraria.Main.bloodMoon, Terraria.ID.TileID.Sets.BreakableWhenPlacing, Terraria.Main.cloudAlpha, Terraria.Item.createTile, Terraria.Main.dayTime, 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.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.Main.time, Terraria.Item.type, and Terraria.Tile.wall.