Fix drinking glasses not fitting in reagent dispensers.

This commit is contained in:
Vera Aguilera Puerto
2021-09-30 14:21:30 +02:00
parent 1b44da19ae
commit 6451b339c2
3 changed files with 28 additions and 31 deletions

View File

@@ -8,6 +8,7 @@ using Content.Server.Power.Components;
using Content.Server.UserInterface;
using Content.Shared.ActionBlocker;
using Content.Shared.Chemistry.Components;
using Content.Shared.Chemistry.Components.SolutionManager;
using Content.Shared.Chemistry.Dispenser;
using Content.Shared.Chemistry.EntitySystems;
using Content.Shared.Chemistry.Reagent;
@@ -228,8 +229,8 @@ namespace Content.Server.Chemistry.Components
private ReagentDispenserBoundUserInterfaceState GetUserInterfaceState()
{
var beaker = _beakerContainer.ContainedEntity;
if (beaker == null ||
!EntitySystem.Get<SolutionContainerSystem>().TryGetSolution(beaker, "beaker", out var solution))
if (beaker == null || !beaker.TryGetComponent(out FitsInDispenserComponent? fits) ||
!EntitySystem.Get<SolutionContainerSystem>().TryGetSolution(beaker, fits.Solution, out var solution))
{
return new ReagentDispenserBoundUserInterfaceState(Powered, false, ReagentUnit.New(0),
ReagentUnit.New(0),
@@ -275,9 +276,9 @@ namespace Content.Server.Chemistry.Components
/// </summary>
private void TryClear()
{
if (!HasBeaker ||
if (!HasBeaker || !_beakerContainer.ContainedEntity!.TryGetComponent(out FitsInDispenserComponent? fits) ||
!EntitySystem.Get<SolutionContainerSystem>()
.TryGetSolution(_beakerContainer.ContainedEntity, "beaker", out var solution))
.TryGetSolution(_beakerContainer.ContainedEntity, fits.Solution, out var solution))
return;
EntitySystem.Get<SolutionContainerSystem>().RemoveAllSolution(_beakerContainer.ContainedEntity!.Uid, solution);
@@ -293,9 +294,9 @@ namespace Content.Server.Chemistry.Components
{
if (!HasBeaker) return;
if (_beakerContainer.ContainedEntity == null
if (_beakerContainer.ContainedEntity is not {} contained || !contained.TryGetComponent(out FitsInDispenserComponent? fits)
|| !EntitySystem.Get<SolutionContainerSystem>()
.TryGetSolution(_beakerContainer.ContainedEntity, "beaker", out var solution)) return;
.TryGetSolution(_beakerContainer.ContainedEntity, fits.Solution, out var solution)) return;
EntitySystem.Get<SolutionContainerSystem>()
.TryAddReagent(_beakerContainer.ContainedEntity.Uid, solution, Inventory[dispenseIndex].ID, _dispenseAmount, out _);
@@ -349,34 +350,27 @@ namespace Content.Server.Chemistry.Components
return false;
}
var solutionSys = EntitySystem.Get<SolutionContainerSystem>();
var activeHandEntity = hands.GetActiveHand.Owner;
if (solutionSys.TryGetSolution(activeHandEntity, "beaker", out _))
if (activeHandEntity.HasComponent<FitsInDispenserComponent>())
{
if (HasBeaker)
{
Owner.PopupMessage(args.User,
Loc.GetString("reagent-dispenser-component-has-container-already-message"));
return false;
}
else if (!solutionSys.HasFitsInDispenser(activeHandEntity))
{
//If it can't fit in the dispenser, don't put it in. For example, buckets and mop buckets can't fit.
Owner.PopupMessage(args.User, Loc.GetString("reagent-dispenser-component-cannot-fit-message"));
}
else
{
_beakerContainer.Insert(activeHandEntity);
UpdateUserInterface();
}
}
else
{
Owner.PopupMessage(args.User,
Loc.GetString("reagent-dispenser-component-cannot-put-entity-message",
("entity", activeHandEntity)));
_beakerContainer.Insert(activeHandEntity);
UpdateUserInterface();
return true;
}
return true;
Owner.PopupMessage(args.User,
Loc.GetString("reagent-dispenser-component-cannot-put-entity-message",
("entity", activeHandEntity)));
return false;
}
private void ClickSound()