diff --git a/TShockAPI/GetDataHandlers.cs b/TShockAPI/GetDataHandlers.cs
index 35344120..d1c31409 100755
--- a/TShockAPI/GetDataHandlers.cs
+++ b/TShockAPI/GetDataHandlers.cs
@@ -1614,19 +1614,55 @@ namespace TShockAPI
}
///
- /// Tiles that can be oriented (e.g., beds, chairs, bathtubs, etc).
+ /// Tile IDs that can be oriented:
+ /// Cannon,
+ /// Chairs,
+ /// Beds,
+ /// Bathtubs,
+ /// Statues,
+ /// Mannequin,
+ /// Traps,
+ /// MusicBoxes,
+ /// ChristmasTree,
+ /// WaterFountain,
+ /// Womannequin,
+ /// MinecartTrack,
+ /// WeaponsRack
///
- private static int[] orientableTiles = new int[] { TileID.Cannon, 15, 79, 90, 105, TileID.Mannequin, 137, 139, 171, 207, 314, TileID.Womannequin, TileID.MinecartTrack, TileID.WeaponsRack };
+ private static int[] orientableTiles = new int[]
+ {
+ TileID.Cannon,
+ TileID.Chairs,
+ TileID.Beds,
+ TileID.Bathtubs,
+ TileID.Statues,
+ TileID.Mannequin,
+ TileID.Traps,
+ TileID.MusicBoxes,
+ TileID.ChristmasTree,
+ TileID.WaterFountain,
+ TileID.Womannequin,
+ TileID.MinecartTrack,
+ TileID.WeaponsRack
+ };
private static bool HandleSendTileSquare(GetDataHandlerArgs args)
{
- if (args.Player.Group.HasPermission(Permissions.allowclientsideworldedit))
- return false;
-
var size = args.Data.ReadInt16();
var tileX = args.Data.ReadInt16();
var tileY = args.Data.ReadInt16();
+ bool isTrapdoor = false;
+
+ if (Main.tile[tileX, tileY].type == TileID.TrapdoorClosed
+ || Main.tile[tileX, tileY].type == TileID.TrapdoorOpen)
+ {
+ isTrapdoor = true;
+ }
+
+ if (args.Player.Group.HasPermission(Permissions.allowclientsideworldedit) && !isTrapdoor)
+ return false;
+
if (OnSendTileSquare(size, tileX, tileY))
return true;
@@ -1806,7 +1842,10 @@ namespace TShockAPI
///
/// Extra place style limits for strange hardcoded values in Terraria
///
- private static Dictionary ExtraneousPlaceStyles = new Dictionary{{TileID.MinecartTrack, 3}};
+ private static Dictionary ExtraneousPlaceStyles = new Dictionary
+ {
+ {TileID.MinecartTrack, 3}
+ };
private static bool HandleTile(GetDataHandlerArgs args)
{
@@ -3628,16 +3667,29 @@ namespace TShockAPI
private static bool HandleDoorUse(GetDataHandlerArgs args)
{
- args.Data.ReadByte(); // Ignore close
- var x = args.Data.ReadInt16();
- var y = args.Data.ReadInt16();
- /* var dir = */ args.Data.ReadByte(); //== 0 ? -1 : 1; // Ignore direction
+ byte type = (byte)args.Data.ReadByte();
+ short x = args.Data.ReadInt16();
+ short y = args.Data.ReadInt16();
+ args.Data.ReadByte(); //Ignore direction
if (x >= Main.maxTilesX || y >= Main.maxTilesY || x < 0 || y < 0) // Check for out of range
+ {
return true;
+ }
- if (Main.tile[x, y].type != 10 && Main.tile[x, y].type != 11) // Check for tile types
+ if (type < 0 || type > 5)
+ {
return true;
+ }
+
+ ushort tileType = Main.tile[x, y].type;
+
+ if (tileType != TileID.ClosedDoor && tileType != TileID.OpenDoor
+ && tileType != TileID.TallGateClosed && tileType != TileID.TallGateOpen
+ && tileType != TileID.TrapdoorClosed && tileType != TileID.TrapdoorOpen)
+ {
+ return true;
+ }
return false;
}