/
BlockCharcoalPit.cs
82 lines (66 loc) · 3.29 KB
/
BlockCharcoalPit.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
using System.Collections.Generic;
using Vintagestory.API.Client;
using Vintagestory.API.Common;
using Vintagestory.API.MathTools;
using Vintagestory.API.Util;
namespace Vintagestory.GameContent
{
public class BlockCharcoalPit : Block, IIgnitable
{
WorldInteraction[] interactions;
public override void OnLoaded(ICoreAPI api)
{
base.OnLoaded(api);
interactions = ObjectCacheUtil.GetOrCreate(api, "charcoalpitInteractions", () =>
{
List<ItemStack> canIgniteStacks = BlockBehaviorCanIgnite.CanIgniteStacks(api, true);
return new WorldInteraction[]
{
new WorldInteraction()
{
ActionLangCode = "blockhelp-firepit-ignite",
MouseButton = EnumMouseButton.Right,
HotKeyCode = "shift",
Itemstacks = canIgniteStacks.ToArray(),
GetMatchingStacks = (wi, bs, es) => {
BlockEntityCharcoalPit becp = api.World.BlockAccessor.GetBlockEntity(bs.Position) as BlockEntityCharcoalPit;
if (becp?.Lit == false)
{
return wi.Itemstacks;
}
return null;
}
}
};
});
}
EnumIgniteState IIgnitable.OnTryIgniteStack(EntityAgent byEntity, BlockPos pos, ItemSlot slot, float secondsIgniting)
{
BlockEntityCharcoalPit becp = api.World.BlockAccessor.GetBlockEntity(pos) as BlockEntityCharcoalPit;
if (becp.Lit) return secondsIgniting > 2 ? EnumIgniteState.IgniteNow : EnumIgniteState.Ignitable;
return EnumIgniteState.NotIgnitable;
}
public EnumIgniteState OnTryIgniteBlock(EntityAgent byEntity, BlockPos pos, float secondsIgniting)
{
BlockEntityCharcoalPit becp = api.World.BlockAccessor.GetBlockEntity(pos) as BlockEntityCharcoalPit;
if (becp == null || becp.Lit) return EnumIgniteState.NotIgnitablePreventDefault;
return secondsIgniting > 3 ? EnumIgniteState.IgniteNow : EnumIgniteState.Ignitable;
}
public void OnTryIgniteBlockOver(EntityAgent byEntity, BlockPos pos, float secondsIgniting, ref EnumHandling handling)
{
BlockEntityCharcoalPit becp = api.World.BlockAccessor.GetBlockEntity(pos) as BlockEntityCharcoalPit;
if (becp != null && !becp.Lit) becp.IgniteNow();
handling = EnumHandling.PreventDefault;
}
public override bool ShouldReceiveClientParticleTicks(IWorldAccessor world, IPlayer player, BlockPos pos, out bool isWindAffected)
{
bool val = base.ShouldReceiveClientParticleTicks(world, player, pos, out _);
isWindAffected = true;
return val;
}
public override WorldInteraction[] GetPlacedBlockInteractionHelp(IWorldAccessor world, BlockSelection selection, IPlayer forPlayer)
{
return interactions.Append(base.GetPlacedBlockInteractionHelp(world, selection, forPlayer));
}
}
}