generate method

  1. @override
Widget generate(
  1. Context context
)

Implementation

@override
Widget generate(Context context) {
  assert(pages.isNotEmpty);

  var target = targetEntity;

  var dOffset = offset;
  final main = <Widget>[];

  if (triggerGui != null) {
    target ??=
        Entity(type: Entities.chest_minecart, tags: ['objd_gui_container']);
    dOffset ??= (minecartAlwaysActive
        ? Location.local(z: 3)
        : Location.rel(y: -0.69));
    main.addAll([
      Execute.as(
        Entity.All(
          nbt: {'SelectedItem': triggerGui!.getMap()},
          verticalRotation: minecartAlwaysActive ? null : Range.from(80),
        ),
        children: [
          Tag('objd_has_gui_item'),
        ],
      ),
      Execute.asat(
        target,
        children: [
          If(
              Condition.not(
                Entity(tags: ['objd_has_gui_item'], distance: Range.to(8)),
              ),
              then: [
                File.execute(
                  '$path/removecart',
                  child: For.of([
                    Teleport(Entity.Self(), to: Location('~ -500 ~')),
                    Data.merge(Entity.Self(), nbt: {'Items': []}),
                    Kill(),
                  ]),
                )
              ]),
        ],
      ),
      Execute.as(
        Entity(tags: ['objd_had_gui_item']).not(tags: ['objd_has_gui_item']),
        children: [
          Tag('objd_had_gui_item').remove(),
        ],
      ),
      Execute.asat(
        Entity.All(tags: ['objd_has_gui_item'])
            .not(tags: ['objd_had_gui_item']),
        children: [
          File.execute(
            '$path/summoncart',
            child: Summon(
              Entities.chest_minecart,
              location: dOffset,
              name: minecartName,
              tags: ['objd_gui_container'],
              nbt: {
                'CustomDisplayTile': 1,
                'DisplayState': {'Name': 'air'},
                'DisplayOffset': 1
              },
            ),
          ),
        ],
      ).anchored(Facing.eyes),
      Execute.asat(
        Entity.All(tags: ['objd_has_gui_item']),
        children: [
          Teleport(
            target.copyWith(distance: Range.to(8)).sort(Sort.nearest),
            to: dOffset,
          ),
          Tag('objd_had_gui_item'),
          Tag('objd_has_gui_item').remove(),
        ],
      ).anchored(Facing.eyes),
    ]);
  }

  main.add(_mainContent(target));

  return For.of(main);
}