From baeb5a2f20781a870627ddea5be5a1912776934c Mon Sep 17 00:00:00 2001 From: SGKoishi Date: Mon, 28 Nov 2022 00:41:45 -0800 Subject: [PATCH 1/7] Fixed Super Sponge unable to absorb shimmer --- TShockAPI/Bouncer.cs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/TShockAPI/Bouncer.cs b/TShockAPI/Bouncer.cs index a9b99377..ac0bdfbf 100644 --- a/TShockAPI/Bouncer.cs +++ b/TShockAPI/Bouncer.cs @@ -1736,8 +1736,7 @@ namespace TShockAPI { bucket = 3; } - else if (selectedItemType == ItemID.BottomlessBucket || - selectedItemType == ItemID.SuperAbsorbantSponge) + else if (selectedItemType == ItemID.BottomlessBucket) { bucket = 4; } @@ -1762,6 +1761,10 @@ namespace TShockAPI { bucket = 9; } + else if (selectedItemType == ItemID.SuperAbsorbantSponge) + { + bucket = 10; + } if (!wasThereABombNearby && type == LiquidType.Lava && !(bucket == 2 || bucket == 0 || bucket == 5 || bucket == 6 || bucket == 9)) { @@ -1783,7 +1786,7 @@ namespace TShockAPI return; } - if (!wasThereABombNearby && type == LiquidType.Water && !(bucket == 1 || bucket == 0 || bucket == 4 || bucket == 9)) + if (!wasThereABombNearby && type == LiquidType.Water && !(bucket == 1 || bucket == 0 || bucket == 4 || bucket == 9 || bucket == 10)) { TShock.Log.ConsoleDebug(GetString("Bouncer / OnLiquidSet rejected bucket check 2 from {0}", args.Player.Name)); args.Player.SendErrorMessage(GetString("You do not have permission to perform this action.")); @@ -1823,7 +1826,7 @@ namespace TShockAPI return; } - if (!wasThereABombNearby && type == LiquidType.Shimmer && !(bucket == 8 || bucket == 9)) + if (!wasThereABombNearby && type == LiquidType.Shimmer && !(bucket == 8 || bucket == 9 || bucket == 10)) { TShock.Log.ConsoleDebug(GetString("Bouncer / OnLiquidSet rejected bucket check 6 from {0}", args.Player.Name)); args.Player.SendErrorMessage(GetString("You do not have permission to perform this action.")); From 35d47fdf6aa214bce792bebfad483fd12ce59d85 Mon Sep 17 00:00:00 2001 From: SGKoishi Date: Mon, 28 Nov 2022 00:44:45 -0800 Subject: [PATCH 2/7] Remove bucket magic number --- TShockAPI/Bouncer.cs | 54 ++++---------------------------------------- 1 file changed, 4 insertions(+), 50 deletions(-) diff --git a/TShockAPI/Bouncer.cs b/TShockAPI/Bouncer.cs index ac0bdfbf..35a1cf1f 100644 --- a/TShockAPI/Bouncer.cs +++ b/TShockAPI/Bouncer.cs @@ -1718,55 +1718,9 @@ namespace TShockAPI // Arguably the banned buckets bit should be in the item bans system if (amount != 0) { - int bucket = -1; int selectedItemType = args.Player.TPlayer.inventory[args.Player.TPlayer.selectedItem].type; - if (selectedItemType == ItemID.EmptyBucket) - { - bucket = 0; - } - else if (selectedItemType == ItemID.WaterBucket) - { - bucket = 1; - } - else if (selectedItemType == ItemID.LavaBucket) - { - bucket = 2; - } - else if (selectedItemType == ItemID.HoneyBucket) - { - bucket = 3; - } - else if (selectedItemType == ItemID.BottomlessBucket) - { - bucket = 4; - } - else if (selectedItemType == ItemID.LavaAbsorbantSponge) - { - bucket = 5; - } - else if (selectedItemType == ItemID.BottomlessLavaBucket) - { - bucket = 6; - } - else if (selectedItemType == ItemID.BottomlessHoneyBucket - || selectedItemType == ItemID.HoneyAbsorbantSponge) - { - bucket = 7; - } - else if (selectedItemType == ItemID.BottomlessShimmerBucket) - { - bucket = 8; - } - else if (selectedItemType == ItemID.UltraAbsorbantSponge) - { - bucket = 9; - } - else if (selectedItemType == ItemID.SuperAbsorbantSponge) - { - bucket = 10; - } - if (!wasThereABombNearby && type == LiquidType.Lava && !(bucket == 2 || bucket == 0 || bucket == 5 || bucket == 6 || bucket == 9)) + if (!wasThereABombNearby && type == LiquidType.Lava && !(selectedItemType == ItemID.LavaBucket || selectedItemType == ItemID.EmptyBucket || selectedItemType == ItemID.LavaAbsorbantSponge || selectedItemType == ItemID.BottomlessLavaBucket || selectedItemType == ItemID.UltraAbsorbantSponge)) { TShock.Log.ConsoleDebug(GetString("Bouncer / OnLiquidSet rejected bucket check 1 from {0}", args.Player.Name)); args.Player.SendErrorMessage(GetString("You do not have permission to perform this action.")); @@ -1786,7 +1740,7 @@ namespace TShockAPI return; } - if (!wasThereABombNearby && type == LiquidType.Water && !(bucket == 1 || bucket == 0 || bucket == 4 || bucket == 9 || bucket == 10)) + if (!wasThereABombNearby && type == LiquidType.Water && !(selectedItemType == ItemID.WaterBucket || selectedItemType == ItemID.EmptyBucket || selectedItemType == ItemID.BottomlessBucket || selectedItemType == ItemID.UltraAbsorbantSponge || selectedItemType == ItemID.SuperAbsorbantSponge)) { TShock.Log.ConsoleDebug(GetString("Bouncer / OnLiquidSet rejected bucket check 2 from {0}", args.Player.Name)); args.Player.SendErrorMessage(GetString("You do not have permission to perform this action.")); @@ -1806,7 +1760,7 @@ namespace TShockAPI return; } - if (!wasThereABombNearby && type == LiquidType.Honey && !(bucket == 3 || bucket == 0 || bucket == 7 || bucket == 9)) + if (!wasThereABombNearby && type == LiquidType.Honey && !(selectedItemType == ItemID.HoneyBucket || selectedItemType == ItemID.EmptyBucket || selectedItemType == ItemID.BottomlessHoneyBucket || selectedItemType == ItemID.HoneyAbsorbantSponge || selectedItemType == ItemID.UltraAbsorbantSponge)) { TShock.Log.ConsoleDebug(GetString("Bouncer / OnLiquidSet rejected bucket check 4 from {0}", args.Player.Name)); args.Player.SendErrorMessage(GetString("You do not have permission to perform this action.")); @@ -1826,7 +1780,7 @@ namespace TShockAPI return; } - if (!wasThereABombNearby && type == LiquidType.Shimmer && !(bucket == 8 || bucket == 9 || bucket == 10)) + if (!wasThereABombNearby && type == LiquidType.Shimmer && !(selectedItemType == ItemID.BottomlessShimmerBucket || selectedItemType == ItemID.UltraAbsorbantSponge || selectedItemType == ItemID.SuperAbsorbantSponge)) { TShock.Log.ConsoleDebug(GetString("Bouncer / OnLiquidSet rejected bucket check 6 from {0}", args.Player.Name)); args.Player.SendErrorMessage(GetString("You do not have permission to perform this action.")); From 62e6aaa82652efbab7528483108ead0eacb99c10 Mon Sep 17 00:00:00 2001 From: SGKoishi Date: Mon, 28 Nov 2022 00:49:46 -0800 Subject: [PATCH 3/7] Use single reject to reduce code --- TShockAPI/Bouncer.cs | 53 +++++++++++++------------------------------- 1 file changed, 15 insertions(+), 38 deletions(-) diff --git a/TShockAPI/Bouncer.cs b/TShockAPI/Bouncer.cs index 35a1cf1f..32e92b44 100644 --- a/TShockAPI/Bouncer.cs +++ b/TShockAPI/Bouncer.cs @@ -1720,84 +1720,61 @@ namespace TShockAPI { int selectedItemType = args.Player.TPlayer.inventory[args.Player.TPlayer.selectedItem].type; - if (!wasThereABombNearby && type == LiquidType.Lava && !(selectedItemType == ItemID.LavaBucket || selectedItemType == ItemID.EmptyBucket || selectedItemType == ItemID.LavaAbsorbantSponge || selectedItemType == ItemID.BottomlessLavaBucket || selectedItemType == ItemID.UltraAbsorbantSponge)) + void Reject(string reason) { - TShock.Log.ConsoleDebug(GetString("Bouncer / OnLiquidSet rejected bucket check 1 from {0}", args.Player.Name)); + TShock.Log.ConsoleDebug(GetString("Bouncer / OnLiquidSet rejected liquid type {0} from {1} holding {2}", type, args.Player.Name, selectedItemType)); args.Player.SendErrorMessage(GetString("You do not have permission to perform this action.")); - args.Player.Disable(GetString("Spreading lava without holding a lava bucket"), DisableFlags.WriteToLogAndConsole); + args.Player.Disable(reason, DisableFlags.WriteToLogAndConsole); args.Player.SendTileSquareCentered(tileX, tileY, 1); args.Handled = true; + } + + if (!wasThereABombNearby && type == LiquidType.Lava && !(selectedItemType == ItemID.LavaBucket || selectedItemType == ItemID.EmptyBucket || selectedItemType == ItemID.LavaAbsorbantSponge || selectedItemType == ItemID.BottomlessLavaBucket || selectedItemType == ItemID.UltraAbsorbantSponge)) + { + Reject(GetString("Spreading lava without holding a lava bucket")); return; } if (!wasThereABombNearby && type == LiquidType.Lava && TShock.ItemBans.DataModel.ItemIsBanned("Lava Bucket", args.Player)) { - TShock.Log.ConsoleDebug(GetString("Bouncer / OnLiquidSet rejected lava bucket from {0}", args.Player.Name)); - args.Player.SendErrorMessage(GetString("You do not have permission to perform this action.")); - args.Player.Disable(GetString("Using banned lava bucket without permissions"), DisableFlags.WriteToLogAndConsole); - args.Player.SendTileSquareCentered(tileX, tileY, 1); - args.Handled = true; + Reject(GetString("Using banned lava bucket without permissions")); return; } if (!wasThereABombNearby && type == LiquidType.Water && !(selectedItemType == ItemID.WaterBucket || selectedItemType == ItemID.EmptyBucket || selectedItemType == ItemID.BottomlessBucket || selectedItemType == ItemID.UltraAbsorbantSponge || selectedItemType == ItemID.SuperAbsorbantSponge)) { - TShock.Log.ConsoleDebug(GetString("Bouncer / OnLiquidSet rejected bucket check 2 from {0}", args.Player.Name)); - args.Player.SendErrorMessage(GetString("You do not have permission to perform this action.")); - args.Player.Disable(GetString("Spreading water without holding a water bucket"), DisableFlags.WriteToLogAndConsole); - args.Player.SendTileSquareCentered(tileX, tileY, 1); - args.Handled = true; + Reject(GetString("Spreading water without holding a water bucket")); return; } if (!wasThereABombNearby && type == LiquidType.Water && TShock.ItemBans.DataModel.ItemIsBanned("Water Bucket", args.Player)) { - TShock.Log.ConsoleDebug(GetString("Bouncer / OnLiquidSet rejected bucket check 3 from {0}", args.Player.Name)); - args.Player.SendErrorMessage(GetString("You do not have permission to perform this action.")); - args.Player.Disable(GetString("Using banned water bucket without permissions"), DisableFlags.WriteToLogAndConsole); - args.Player.SendTileSquareCentered(tileX, tileY, 1); - args.Handled = true; + Reject(GetString("Using banned water bucket without permissions")); return; } if (!wasThereABombNearby && type == LiquidType.Honey && !(selectedItemType == ItemID.HoneyBucket || selectedItemType == ItemID.EmptyBucket || selectedItemType == ItemID.BottomlessHoneyBucket || selectedItemType == ItemID.HoneyAbsorbantSponge || selectedItemType == ItemID.UltraAbsorbantSponge)) { - TShock.Log.ConsoleDebug(GetString("Bouncer / OnLiquidSet rejected bucket check 4 from {0}", args.Player.Name)); - args.Player.SendErrorMessage(GetString("You do not have permission to perform this action.")); - args.Player.Disable(GetString("Spreading honey without holding a honey bucket"), DisableFlags.WriteToLogAndConsole); - args.Player.SendTileSquareCentered(tileX, tileY, 1); - args.Handled = true; + Reject(GetString("Spreading honey without holding a honey bucket")); return; } if (!wasThereABombNearby && type == LiquidType.Honey && TShock.ItemBans.DataModel.ItemIsBanned("Honey Bucket", args.Player)) { - TShock.Log.ConsoleDebug(GetString("Bouncer / OnLiquidSet rejected bucket check 5 from {0}", args.Player.Name)); - args.Player.SendErrorMessage(GetString("You do not have permission to perform this action.")); - args.Player.Disable(GetString("Using banned honey bucket without permissions"), DisableFlags.WriteToLogAndConsole); - args.Player.SendTileSquareCentered(tileX, tileY, 1); - args.Handled = true; + Reject(GetString("Using banned honey bucket without permissions")); return; } if (!wasThereABombNearby && type == LiquidType.Shimmer && !(selectedItemType == ItemID.BottomlessShimmerBucket || selectedItemType == ItemID.UltraAbsorbantSponge || selectedItemType == ItemID.SuperAbsorbantSponge)) { - TShock.Log.ConsoleDebug(GetString("Bouncer / OnLiquidSet rejected bucket check 6 from {0}", args.Player.Name)); - args.Player.SendErrorMessage(GetString("You do not have permission to perform this action.")); - args.Player.Disable(GetString("Spreading shimmer without holding a shimmer bucket"), DisableFlags.WriteToLogAndConsole); - args.Player.SendTileSquareCentered(tileX, tileY, 1); - args.Handled = true; + Reject(GetString("Spreading shimmer without holding a shimmer bucket")); return; } if (!wasThereABombNearby && type == LiquidType.Shimmer && TShock.ItemBans.DataModel.ItemIsBanned("Bottomless Shimmer Bucket", args.Player)) { - TShock.Log.ConsoleDebug(GetString("Bouncer / OnLiquidSet rejected bucket check 7 from {0}", args.Player.Name)); - args.Player.SendErrorMessage(GetString("You do not have permission to perform this action.")); - args.Player.Disable(GetString("Using banned bottomless shimmer bucket without permissions"), DisableFlags.WriteToLogAndConsole); - args.Player.SendTileSquareCentered(tileX, tileY, 1); - args.Handled = true; + Reject(GetString("Using banned bottomless shimmer bucket without permissions")); return; } } From ac7ee7e706eec26b45d4dfc3c5001cdf460a7eb4 Mon Sep 17 00:00:00 2001 From: SGKoishi Date: Mon, 28 Nov 2022 00:50:45 -0800 Subject: [PATCH 4/7] Extract common condition --- TShockAPI/Bouncer.cs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/TShockAPI/Bouncer.cs b/TShockAPI/Bouncer.cs index 32e92b44..cfa10b50 100644 --- a/TShockAPI/Bouncer.cs +++ b/TShockAPI/Bouncer.cs @@ -1716,7 +1716,7 @@ namespace TShockAPI // Liquid anti-cheat // Arguably the banned buckets bit should be in the item bans system - if (amount != 0) + if (amount != 0 && !wasThereABombNearby) { int selectedItemType = args.Player.TPlayer.inventory[args.Player.TPlayer.selectedItem].type; @@ -1729,49 +1729,49 @@ namespace TShockAPI args.Handled = true; } - if (!wasThereABombNearby && type == LiquidType.Lava && !(selectedItemType == ItemID.LavaBucket || selectedItemType == ItemID.EmptyBucket || selectedItemType == ItemID.LavaAbsorbantSponge || selectedItemType == ItemID.BottomlessLavaBucket || selectedItemType == ItemID.UltraAbsorbantSponge)) + if (type == LiquidType.Lava && !(selectedItemType == ItemID.LavaBucket || selectedItemType == ItemID.EmptyBucket || selectedItemType == ItemID.LavaAbsorbantSponge || selectedItemType == ItemID.BottomlessLavaBucket || selectedItemType == ItemID.UltraAbsorbantSponge)) { Reject(GetString("Spreading lava without holding a lava bucket")); return; } - if (!wasThereABombNearby && type == LiquidType.Lava && TShock.ItemBans.DataModel.ItemIsBanned("Lava Bucket", args.Player)) + if (type == LiquidType.Lava && TShock.ItemBans.DataModel.ItemIsBanned("Lava Bucket", args.Player)) { Reject(GetString("Using banned lava bucket without permissions")); return; } - if (!wasThereABombNearby && type == LiquidType.Water && !(selectedItemType == ItemID.WaterBucket || selectedItemType == ItemID.EmptyBucket || selectedItemType == ItemID.BottomlessBucket || selectedItemType == ItemID.UltraAbsorbantSponge || selectedItemType == ItemID.SuperAbsorbantSponge)) + if (type == LiquidType.Water && !(selectedItemType == ItemID.WaterBucket || selectedItemType == ItemID.EmptyBucket || selectedItemType == ItemID.BottomlessBucket || selectedItemType == ItemID.UltraAbsorbantSponge || selectedItemType == ItemID.SuperAbsorbantSponge)) { Reject(GetString("Spreading water without holding a water bucket")); return; } - if (!wasThereABombNearby && type == LiquidType.Water && TShock.ItemBans.DataModel.ItemIsBanned("Water Bucket", args.Player)) + if (type == LiquidType.Water && TShock.ItemBans.DataModel.ItemIsBanned("Water Bucket", args.Player)) { Reject(GetString("Using banned water bucket without permissions")); return; } - if (!wasThereABombNearby && type == LiquidType.Honey && !(selectedItemType == ItemID.HoneyBucket || selectedItemType == ItemID.EmptyBucket || selectedItemType == ItemID.BottomlessHoneyBucket || selectedItemType == ItemID.HoneyAbsorbantSponge || selectedItemType == ItemID.UltraAbsorbantSponge)) + if (type == LiquidType.Honey && !(selectedItemType == ItemID.HoneyBucket || selectedItemType == ItemID.EmptyBucket || selectedItemType == ItemID.BottomlessHoneyBucket || selectedItemType == ItemID.HoneyAbsorbantSponge || selectedItemType == ItemID.UltraAbsorbantSponge)) { Reject(GetString("Spreading honey without holding a honey bucket")); return; } - if (!wasThereABombNearby && type == LiquidType.Honey && TShock.ItemBans.DataModel.ItemIsBanned("Honey Bucket", args.Player)) + if (type == LiquidType.Honey && TShock.ItemBans.DataModel.ItemIsBanned("Honey Bucket", args.Player)) { Reject(GetString("Using banned honey bucket without permissions")); return; } - if (!wasThereABombNearby && type == LiquidType.Shimmer && !(selectedItemType == ItemID.BottomlessShimmerBucket || selectedItemType == ItemID.UltraAbsorbantSponge || selectedItemType == ItemID.SuperAbsorbantSponge)) + if (type == LiquidType.Shimmer && !(selectedItemType == ItemID.BottomlessShimmerBucket || selectedItemType == ItemID.UltraAbsorbantSponge || selectedItemType == ItemID.SuperAbsorbantSponge)) { Reject(GetString("Spreading shimmer without holding a shimmer bucket")); return; } - if (!wasThereABombNearby && type == LiquidType.Shimmer && + if (type == LiquidType.Shimmer && TShock.ItemBans.DataModel.ItemIsBanned("Bottomless Shimmer Bucket", args.Player)) { Reject(GetString("Using banned bottomless shimmer bucket without permissions")); From 49921cb7ed621d13da45e81c661c81b115fe0baf Mon Sep 17 00:00:00 2001 From: SGKoishi Date: Mon, 28 Nov 2022 00:56:02 -0800 Subject: [PATCH 5/7] Move permission check together --- TShockAPI/Bouncer.cs | 62 ++++++++++++++++++++++++++++---------------- 1 file changed, 39 insertions(+), 23 deletions(-) diff --git a/TShockAPI/Bouncer.cs b/TShockAPI/Bouncer.cs index cfa10b50..4b1ff297 100644 --- a/TShockAPI/Bouncer.cs +++ b/TShockAPI/Bouncer.cs @@ -1729,15 +1729,50 @@ namespace TShockAPI args.Handled = true; } - if (type == LiquidType.Lava && !(selectedItemType == ItemID.LavaBucket || selectedItemType == ItemID.EmptyBucket || selectedItemType == ItemID.LavaAbsorbantSponge || selectedItemType == ItemID.BottomlessLavaBucket || selectedItemType == ItemID.UltraAbsorbantSponge)) + if (TShock.ItemBans.DataModel.ItemIsBanned(EnglishLanguage.GetItemNameById(selectedItemType), args.Player)) { - Reject(GetString("Spreading lava without holding a lava bucket")); + Reject(GetString("Using banned {0} to manipulate liquid", Lang.GetItemNameValue(selectedItemType))); return; } - if (type == LiquidType.Lava && TShock.ItemBans.DataModel.ItemIsBanned("Lava Bucket", args.Player)) + switch (type) { - Reject(GetString("Using banned lava bucket without permissions")); + case LiquidType.Water: + if (TShock.ItemBans.DataModel.ItemIsBanned(EnglishLanguage.GetItemNameById(ItemID.WaterBucket), args.Player)) + { + Reject(GetString("Using banned water bucket without permissions")); + return; + } + break; + case LiquidType.Lava: + if (TShock.ItemBans.DataModel.ItemIsBanned(EnglishLanguage.GetItemNameById(ItemID.LavaBucket), args.Player)) + { + Reject(GetString("Using banned lava bucket without permissions")); + return; + } + break; + case LiquidType.Honey: + if (TShock.ItemBans.DataModel.ItemIsBanned(EnglishLanguage.GetItemNameById(ItemID.HoneyBucket), args.Player)) + { + Reject(GetString("Using banned honey bucket without permissions")); + return; + } + break; + case LiquidType.Shimmer: + if (TShock.ItemBans.DataModel.ItemIsBanned(EnglishLanguage.GetItemNameById(ItemID.BottomlessShimmerBucket), args.Player)) + { + Reject(GetString("Using banned shimmering water bucket without permissions")); + return; + } + break; + default: + Reject(GetString("Manipulating unknown liquid type")); + return; + } + + if (type == LiquidType.Lava && !(selectedItemType == ItemID.LavaBucket || selectedItemType == ItemID.EmptyBucket || selectedItemType == ItemID.LavaAbsorbantSponge || selectedItemType == ItemID.BottomlessLavaBucket || selectedItemType == ItemID.UltraAbsorbantSponge)) + { + Reject(GetString("Spreading lava without holding a lava bucket")); return; } @@ -1747,36 +1782,17 @@ namespace TShockAPI return; } - if (type == LiquidType.Water && TShock.ItemBans.DataModel.ItemIsBanned("Water Bucket", args.Player)) - { - Reject(GetString("Using banned water bucket without permissions")); - return; - } - if (type == LiquidType.Honey && !(selectedItemType == ItemID.HoneyBucket || selectedItemType == ItemID.EmptyBucket || selectedItemType == ItemID.BottomlessHoneyBucket || selectedItemType == ItemID.HoneyAbsorbantSponge || selectedItemType == ItemID.UltraAbsorbantSponge)) { Reject(GetString("Spreading honey without holding a honey bucket")); return; } - if (type == LiquidType.Honey && TShock.ItemBans.DataModel.ItemIsBanned("Honey Bucket", args.Player)) - { - Reject(GetString("Using banned honey bucket without permissions")); - return; - } - if (type == LiquidType.Shimmer && !(selectedItemType == ItemID.BottomlessShimmerBucket || selectedItemType == ItemID.UltraAbsorbantSponge || selectedItemType == ItemID.SuperAbsorbantSponge)) { Reject(GetString("Spreading shimmer without holding a shimmer bucket")); return; } - - if (type == LiquidType.Shimmer && - TShock.ItemBans.DataModel.ItemIsBanned("Bottomless Shimmer Bucket", args.Player)) - { - Reject(GetString("Using banned bottomless shimmer bucket without permissions")); - return; - } } if (!args.Player.HasBuildPermission(tileX, tileY)) From fa08859952fd979723c711aa549af4a3f58702ea Mon Sep 17 00:00:00 2001 From: SGKoishi Date: Mon, 28 Nov 2022 00:57:53 -0800 Subject: [PATCH 6/7] Group checks by item type instead of liquid type --- TShockAPI/Bouncer.cs | 68 ++++++++++++++++++++++++++++++-------------- 1 file changed, 47 insertions(+), 21 deletions(-) diff --git a/TShockAPI/Bouncer.cs b/TShockAPI/Bouncer.cs index 4b1ff297..484cc524 100644 --- a/TShockAPI/Bouncer.cs +++ b/TShockAPI/Bouncer.cs @@ -1770,28 +1770,54 @@ namespace TShockAPI return; } - if (type == LiquidType.Lava && !(selectedItemType == ItemID.LavaBucket || selectedItemType == ItemID.EmptyBucket || selectedItemType == ItemID.LavaAbsorbantSponge || selectedItemType == ItemID.BottomlessLavaBucket || selectedItemType == ItemID.UltraAbsorbantSponge)) + switch (selectedItemType) { - Reject(GetString("Spreading lava without holding a lava bucket")); - return; - } - - if (type == LiquidType.Water && !(selectedItemType == ItemID.WaterBucket || selectedItemType == ItemID.EmptyBucket || selectedItemType == ItemID.BottomlessBucket || selectedItemType == ItemID.UltraAbsorbantSponge || selectedItemType == ItemID.SuperAbsorbantSponge)) - { - Reject(GetString("Spreading water without holding a water bucket")); - return; - } - - if (type == LiquidType.Honey && !(selectedItemType == ItemID.HoneyBucket || selectedItemType == ItemID.EmptyBucket || selectedItemType == ItemID.BottomlessHoneyBucket || selectedItemType == ItemID.HoneyAbsorbantSponge || selectedItemType == ItemID.UltraAbsorbantSponge)) - { - Reject(GetString("Spreading honey without holding a honey bucket")); - return; - } - - if (type == LiquidType.Shimmer && !(selectedItemType == ItemID.BottomlessShimmerBucket || selectedItemType == ItemID.UltraAbsorbantSponge || selectedItemType == ItemID.SuperAbsorbantSponge)) - { - Reject(GetString("Spreading shimmer without holding a shimmer bucket")); - return; + case ItemID.WaterBucket: + case ItemID.BottomlessBucket: + if (type != LiquidType.Water) + { + Reject(GetString("Using {0} on non-water", Lang.GetItemNameValue(selectedItemType))); + return; + } + break; + case ItemID.HoneyBucket: + case ItemID.HoneyAbsorbantSponge: + case ItemID.BottomlessHoneyBucket: + if (type != LiquidType.Honey) + { + Reject(GetString("Using {0} on non-honey", Lang.GetItemNameValue(selectedItemType))); + return; + } + break; + case ItemID.LavaAbsorbantSponge: + case ItemID.BottomlessLavaBucket: + case ItemID.LavaBucket: + if (type != LiquidType.Lava) + { + Reject(GetString("Using {0} on non-lava", Lang.GetItemNameValue(selectedItemType))); + return; + } + break; + case ItemID.BottomlessShimmerBucket: + if (type != LiquidType.Shimmer) + { + Reject(GetString("Using {0} on non-shimmer", Lang.GetItemNameValue(selectedItemType))); + return; + } + break; + case ItemID.SuperAbsorbantSponge: + if (type != LiquidType.Water && type != LiquidType.Shimmer) + { + Reject(GetString("Using {0} on non-water or shimmer", Lang.GetItemNameValue(selectedItemType))); + return; + } + break; + case ItemID.EmptyBucket: + case ItemID.UltraAbsorbantSponge: + break; + default: + Reject(GetString("Using {0} to manipulate unknown liquid {1}", Lang.GetItemNameValue(selectedItemType), type)); + return; } } From 536c4d25459a61971af07d03453e6d46ce7f4b41 Mon Sep 17 00:00:00 2001 From: SGKoishi Date: Mon, 28 Nov 2022 00:58:41 -0800 Subject: [PATCH 7/7] Update changelog --- docs/changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/changelog.md b/docs/changelog.md index 72c1d358..9bfc729a 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -84,6 +84,7 @@ Use past tense when adding new entries; sign your name off when you add or chang * Improved rejection message and code duplication in `OnPlayerBuff` (@drunderscore) * This will make it so Bouncer rejections regarding `PlayerAddBuff` will now always include the sender index, buff type, receiver index, and time in ticks, allowing much faster triage of buff whitelist issues. * Allowed Digging Molecart and bomb fish to break tiles and place tracks (@sgkoishi) +* Fixed Super Sponge unable to absorb shimmer. (@sgkoishi, #2833) ## TShock 5.1.3 * Added support for Terraria 1.4.4.9 via OTAPI 3.1.20. (@SignatureBeef)