diff --git a/TShockAPI/GetDataHandlers.cs b/TShockAPI/GetDataHandlers.cs
index a86a37cb..4b3b5d4e 100644
--- a/TShockAPI/GetDataHandlers.cs
+++ b/TShockAPI/GetDataHandlers.cs
@@ -633,20 +633,20 @@ namespace TShockAPI
///
public int TileY { get; set; }
///
- /// ???
+ /// Amount of liquid
///
- public byte Liquid { get; set;}
+ public byte Amount { get; set;}
///
- /// True if lava
+ /// Type of Liquid: 0=water, 1=lave, 2=honey
///
- public bool Lava { get; set; }
+ public byte Type { get; set; }
}
///
/// LiquidSet - When ever a liquid is set
///
public static HandlerList LiquidSet;
- private static bool OnLiquidSet(int tilex, int tiley, byte liquid, bool lava)
+ private static bool OnLiquidSet(int tilex, int tiley, byte amount, byte type)
{
if (LiquidSet == null)
return false;
@@ -655,8 +655,8 @@ namespace TShockAPI
{
TileX = tilex,
TileY = tiley,
- Liquid = liquid,
- Lava = lava,
+ Amount = amount,
+ Type = type,
};
LiquidSet.Invoke(null, args);
return args.Handled;
@@ -2380,11 +2380,12 @@ namespace TShockAPI
{
int tileX = args.Data.ReadInt32();
int tileY = args.Data.ReadInt32();
- byte liquid = args.Data.ReadInt8();
- bool lava = args.Data.ReadBoolean();
+ byte amount = args.Data.ReadInt8();
+ byte type = args.Data.ReadInt8();
- if (OnLiquidSet(tileX, tileY, liquid, lava))
+ if (OnLiquidSet(tileX, tileY, amount, type))
return true;
+
if (tileX < 0 || tileX >= Main.maxTilesX || tileY < 0 || tileY >= Main.maxTilesY)
return false;
@@ -2403,9 +2404,9 @@ namespace TShockAPI
if (!args.Player.Group.HasPermission(Permissions.ignoreliquidsetdetection))
{
- args.Player.TileLiquidThreshold++;
+ args.Player.TileLiquidThreshold+=amount;
}
- if (liquid != 0)
+ if (amount != 0)
{
int bucket = 0;
if (args.TPlayer.inventory[args.TPlayer.selectedItem].type == 206)
@@ -2416,8 +2417,12 @@ namespace TShockAPI
{
bucket = 2;
}
+ else if (args.TPlayer.inventory[args.TPlayer.selectedItem].type == 207)
+ {
+ bucket = 3;
+ }
- if(lava && bucket != 2)
+ if(type == 1 && bucket != 2)
{
args.Player.SendErrorMessage("You do not have permission to perform this action.");
args.Player.Disable("Spreading lava without holding a lava bucket");
@@ -2425,7 +2430,7 @@ namespace TShockAPI
return true;
}
- if(lava && (!args.Player.Group.HasPermission(Permissions.usebanneditem) &&
+ if(type == 1 && (!args.Player.Group.HasPermission(Permissions.usebanneditem) &&
TShock.Itembans.ItemIsBanned("Lava Bucket", args.Player)))
{
args.Player.SendErrorMessage("You do not have permission to perform this action.");
@@ -2434,7 +2439,7 @@ namespace TShockAPI
return true;
}
- if (!lava && bucket != 1)
+ if (type == 0 && bucket != 1)
{
args.Player.SendErrorMessage("You do not have permission to perform this action.");
args.Player.Disable("Spreading water without holding a water bucket");
@@ -2442,7 +2447,7 @@ namespace TShockAPI
return true;
}
- if (!lava && (!args.Player.Group.HasPermission(Permissions.usebanneditem) &&
+ if (type == 0 && (!args.Player.Group.HasPermission(Permissions.usebanneditem) &&
TShock.Itembans.ItemIsBanned("Water Bucket", args.Player)))
{
args.Player.SendErrorMessage("You do not have permission to perform this action.");
@@ -2450,6 +2455,23 @@ namespace TShockAPI
args.Player.SendTileSquare(tileX, tileY);
return true;
}
+
+ if (type == 2 && bucket != 3)
+ {
+ args.Player.SendErrorMessage("You do not have permission to perform this action.");
+ args.Player.Disable("Spreading water without holding a water bucket");
+ args.Player.SendTileSquare(tileX, tileY);
+ return true;
+ }
+
+ if (type == 2 && (!args.Player.Group.HasPermission(Permissions.usebanneditem) &&
+ TShock.Itembans.ItemIsBanned("Honey Bucket", args.Player)))
+ {
+ args.Player.SendErrorMessage("You do not have permission to perform this action.");
+ args.Player.Disable("Using banned honey bucket without permissions");
+ args.Player.SendTileSquare(tileX, tileY);
+ return true;
+ }
}
if (TShock.CheckTilePermission(args.Player, tileX, tileY))
diff --git a/TShockAPI/TSPlayer.cs b/TShockAPI/TSPlayer.cs
index f5354d0a..019602e0 100644
--- a/TShockAPI/TSPlayer.cs
+++ b/TShockAPI/TSPlayer.cs
@@ -395,7 +395,7 @@ namespace TShockAPI
bool flag = false;
if (RealPlayer)
{
- for (int i = 0; i < 40; i++) //41 is trash can, 42-45 is coins, 46-49 is ammo
+ for (int i = 0; i < 50; i++) //41 is trash can, 42-45 is coins, 46-49 is ammo
{
if (TPlayer.inventory[i] == null || !TPlayer.inventory[i].active || TPlayer.inventory[i].name == "")
{
@@ -989,9 +989,10 @@ namespace TShockAPI
this.maxHealth = player.TPlayer.statLifeMax;
Item[] inventory = player.TPlayer.inventory;
Item[] armor = player.TPlayer.armor;
+ Item[] dye = player.TPlayer.dye;
for (int i = 0; i < NetItem.maxNetInventory; i++)
{
- if (i < 49)
+ if (i < NetItem.maxNetInventory - (NetItem.armorSlots + NetItem.dyeSlots))
{
if (player.TPlayer.inventory[i] != null)
{
@@ -1013,11 +1014,12 @@ namespace TShockAPI
this.inventory[i].prefix = 0;
}
}
- else
+ else if (i < NetItem.maxNetInventory - NetItem.dyeSlots)
{
- if (player.TPlayer.armor[i - 48] != null)
+ var index = i - (NetItem.maxNetInventory - (NetItem.armorSlots + NetItem.dyeSlots));
+ if (player.TPlayer.armor[index] != null)
{
- this.inventory[i].netID = armor[i - 48].netID;
+ this.inventory[i].netID = armor[index].netID;
}
else
{
@@ -1026,8 +1028,31 @@ namespace TShockAPI
if (this.inventory[i].netID != 0)
{
- this.inventory[i].stack = armor[i - 48].stack;
- this.inventory[i].prefix = armor[i - 48].prefix;
+ this.inventory[i].stack = armor[index].stack;
+ this.inventory[i].prefix = armor[index].prefix;
+ }
+ else
+ {
+ this.inventory[i].stack = 0;
+ this.inventory[i].prefix = 0;
+ }
+ }
+ else
+ {
+ var index = i - (NetItem.maxNetInventory - NetItem.dyeSlots);
+ if (player.TPlayer.dye[index] != null)
+ {
+ this.inventory[i].netID = armor[index].netID;
+ }
+ else
+ {
+ this.inventory[i].netID = 0;
+ }
+
+ if (this.inventory[i].netID != 0)
+ {
+ this.inventory[i].stack = armor[index].stack;
+ this.inventory[i].prefix = armor[index].prefix;
}
else
{
@@ -1041,11 +1066,13 @@ namespace TShockAPI
public class NetItem
{
- public static int maxNetInventory = 59;
+ public static readonly int maxNetInventory = 73;
+ public static readonly int armorSlots = 11;
+ public static readonly int dyeSlots = 3;
public int netID;
public int stack;
public int prefix;
-
+
public static string ToString(NetItem[] inventory)
{
string inventoryString = "";
diff --git a/TShockAPI/TShock.cs b/TShockAPI/TShock.cs
index c4a4dd12..f2c8f32e 100644
--- a/TShockAPI/TShock.cs
+++ b/TShockAPI/TShock.cs
@@ -1593,9 +1593,10 @@ namespace TShockAPI
Item[] inventory = player.TPlayer.inventory;
Item[] armor = player.TPlayer.armor;
+ Item[] dye = player.TPlayer.dye;
for (int i = 0; i < NetItem.maxNetInventory; i++)
{
- if (i < 49)
+ if (i < NetItem.maxNetInventory - (NetItem.armorSlots + NetItem.dyeSlots))
{
Item item = new Item();
Item serverItem = new Item();
@@ -1632,34 +1633,35 @@ namespace TShockAPI
}
}
}
- else
+ else if(i < (NetItem.maxNetInventory - (NetItem.armorSlots + NetItem.dyeSlots)))
{
Item item = new Item();
Item serverItem = new Item();
- if (armor[i - 48] != null && armor[i - 48].netID != 0)
+ var index = i - (NetItem.maxNetInventory - (NetItem.armorSlots + NetItem.dyeSlots));
+ if (armor[index] != null && armor[index].netID != 0)
{
- if (playerData.inventory[i].netID != armor[i - 48].netID)
+ if (playerData.inventory[i].netID != armor[index].netID)
{
- item.netDefaults(armor[i - 48].netID);
- item.Prefix(armor[i - 48].prefix);
+ item.netDefaults(armor[index].netID);
+ item.Prefix(armor[index].prefix);
item.AffixName();
player.SendMessage(player.IgnoreActionsForInventory = "Your armor (" + item.name + ") needs to be deleted.",
Color.Cyan);
check = false;
}
- else if (playerData.inventory[i].prefix != armor[i - 48].prefix)
+ else if (playerData.inventory[i].prefix != armor[index].prefix)
{
- item.netDefaults(armor[i - 48].netID);
- item.Prefix(armor[i - 48].prefix);
+ item.netDefaults(armor[index].netID);
+ item.Prefix(armor[index].prefix);
item.AffixName();
player.SendMessage(player.IgnoreActionsForInventory = "Your armor (" + item.name + ") needs to be deleted.",
Color.Cyan);
check = false;
}
- else if (armor[i - 48].stack > playerData.inventory[i].stack)
+ else if (armor[index].stack > playerData.inventory[i].stack)
{
- item.netDefaults(armor[i - 48].netID);
- item.Prefix(armor[i - 48].prefix);
+ item.netDefaults(armor[index].netID);
+ item.Prefix(armor[index].prefix);
item.AffixName();
player.SendMessage(
player.IgnoreActionsForInventory =
@@ -1669,6 +1671,44 @@ namespace TShockAPI
}
}
}
+ else if(i < (NetItem.maxNetInventory - (NetItem.armorSlots + NetItem.dyeSlots)))
+ {
+ Item item = new Item();
+ Item serverItem = new Item();
+ var index = i - (NetItem.maxNetInventory - NetItem.dyeSlots);
+ if (dye[index] != null && dye[index].netID != 0)
+ {
+ if (playerData.inventory[i].netID != dye[index].netID)
+ {
+ item.netDefaults(dye[index].netID);
+ item.Prefix(dye[index].prefix);
+ item.AffixName();
+ player.SendMessage(player.IgnoreActionsForInventory = "Your dye (" + item.name + ") needs to be deleted.",
+ Color.Cyan);
+ check = false;
+ }
+ else if (playerData.inventory[i].prefix != dye[index].prefix)
+ {
+ item.netDefaults(dye[index].netID);
+ item.Prefix(dye[index].prefix);
+ item.AffixName();
+ player.SendMessage(player.IgnoreActionsForInventory = "Your dye (" + item.name + ") needs to be deleted.",
+ Color.Cyan);
+ check = false;
+ }
+ else if (dye[index].stack > playerData.inventory[i].stack)
+ {
+ item.netDefaults(dye[index].netID);
+ item.Prefix(dye[index].prefix);
+ item.AffixName();
+ player.SendMessage(
+ player.IgnoreActionsForInventory =
+ "Your dye (" + item.name + ") (" + inventory[i].stack + ") needs to have its stack size decreased to (" +
+ playerData.inventory[i].stack + ").", Color.Cyan);
+ check = false;
+ }
+ }
+ }
}
return check;
@@ -1676,20 +1716,7 @@ namespace TShockAPI
public static bool CheckIgnores(TSPlayer player)
{
- bool check = false;
- if (Config.PvPMode == "always" && !player.TPlayer.hostile)
- check = true;
- if (player.IgnoreActionsForInventory != "none")
- check = true;
- if (player.IgnoreActionsForCheating != "none")
- check = true;
- if (player.IgnoreActionsForDisabledArmor != "none")
- check = true;
- if (player.IgnoreActionsForClearingTrashCan)
- check = true;
- if (!player.IsLoggedIn && Config.RequireLogin)
- check = true;
- return check;
+ return Config.PvPMode == "always" && !player.TPlayer.hostile || player.IgnoreActionsForInventory != "none" || player.IgnoreActionsForCheating != "none" || player.IgnoreActionsForDisabledArmor != "none" || player.IgnoreActionsForClearingTrashCan || !player.IsLoggedIn && Config.RequireLogin;;
}
public void OnConfigRead(ConfigFile file)