Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update GetDataHandlers.cs #2830

Closed
wants to merge 12 commits into from
168 changes: 54 additions & 114 deletions TShockAPI/Bouncer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1716,132 +1716,72 @@ internal void OnLiquidSet(object sender, GetDataHandlers.LiquidSetEventArgs args

// Liquid anti-cheat
// Arguably the banned buckets bit should be in the item bans system
if (amount != 0)
if (amount != 0 && !wasThereABombNearby)
{
int bucket = -1;
int selectedItemType = args.Player.TPlayer.inventory[args.Player.TPlayer.selectedItem].type;
if (selectedItemType == ItemID.EmptyBucket)
var selectedItemType = args.Player.TPlayer.inventory[args.Player.TPlayer.selectedItem].type;
void Reject(string reason)
{
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 ||
selectedItemType == ItemID.SuperAbsorbantSponge)
{
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;
}

if (!wasThereABombNearby && type == LiquidType.Lava && !(bucket == 2 || bucket == 0 || bucket == 5 || bucket == 6 || bucket == 9))
{
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."));
args.Player.Disable(GetString("Spreading lava without holding a lava bucket"), DisableFlags.WriteToLogAndConsole);
args.Player.SendTileSquareCentered(tileX, tileY, 1);
args.Handled = true;
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;
return;
}

if (!wasThereABombNearby && type == LiquidType.Water && !(bucket == 1 || bucket == 0 || bucket == 4 || bucket == 9))
{
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;
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;
return;
}

if (!wasThereABombNearby && type == LiquidType.Honey && !(bucket == 3 || bucket == 0 || bucket == 7 || bucket == 9))
{
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;
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));
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("Using banned honey bucket without permissions"), DisableFlags.WriteToLogAndConsole);
args.Player.Disable(reason, DisableFlags.WriteToLogAndConsole);
args.Player.SendTileSquareCentered(tileX, tileY, 1);
args.Handled = true;
return;
}

if (!wasThereABombNearby && type == LiquidType.Shimmer && !(bucket == 8 || bucket == 9))
if (TShock.ItemBans.DataModel.ItemIsBanned(EnglishLanguage.GetItemNameById(selectedItemType), args.Player))
{
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("Using banned {0} to manipulate liquid", Lang.GetItemNameValue(selectedItemType)));
return;
}

if (!wasThereABombNearby && type == LiquidType.Shimmer &&
TShock.ItemBans.DataModel.ItemIsBanned("Bottomless Shimmer Bucket", args.Player))
switch (selectedItemType)
{
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;
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;
}
}

Expand Down
Loading