47    private array $caches = [];
 
   50        $id = spl_object_id($inventory);
 
   51        if(!isset($this->caches[$id])){
 
   52            $inventory->getDestructorCallbacks()->
add(
function() use ($id) : 
void{
 
   53                unset($this->caches[$id]);
 
   56                unset($this->caches[$id]);
 
   58            $this->caches[$id] = $this->buildCacheEntry($inventory);
 
   60        return $this->caches[$id];
 
   70        $typeConverter = TypeConverter::getInstance();
 
   74        $itemGroupIndexes = [];
 
   77            $group = $entry->getGroup();
 
   78            $category = $entry->getCategory();
 
   80                $groupId = PHP_INT_MIN;
 
   82                $groupId = spl_object_id($group);
 
   83                unset($groupIndexes[$category->name][PHP_INT_MIN]); 
 
   87            if(!isset($groupIndexes[$category->name][$groupId])){
 
   88                $groupIndexes[$category->name][$groupId] = $nextIndex++;
 
   89                $categories[] = $category;
 
   92            $itemGroupIndexes[$k] = $groupIndexes[$category->name][$groupId];
 
  100                $typeConverter->coreItemStackToNet($entry->getItem()),
 
  101                $itemGroupIndexes[$k]
 
  109        $player = $session->getPlayer() ?? 
throw new \LogicException(
"Cannot prepare creative data for a session without a player");
 
  110        $language = $player->getLanguage();
 
  111        $forceLanguage = $player->getServer()->isLanguageForced();
 
  112        $typeConverter = $session->getTypeConverter();
 
  113        $cachedEntry = $this->getCacheEntry($inventory);
 
  114        $translate = 
function(
Translatable|
string $translatable) use ($session, $language, $forceLanguage) : 
string{
 
  115            if(is_string($translatable)){
 
  116                $message = $translatable;
 
  117            }elseif(!$forceLanguage){
 
  120                $message = $language->translate($translatable);
 
  126        foreach($cachedEntry->categories as $index => $category){
 
  127            $group = $cachedEntry->groups[$index];
 
  128            $categoryId = match ($category) {
 
  129                CreativeCategory::CONSTRUCTION => CreativeContentPacket::CATEGORY_CONSTRUCTION,
 
  130                CreativeCategory::NATURE => CreativeContentPacket::CATEGORY_NATURE,
 
  131                CreativeCategory::EQUIPMENT => CreativeContentPacket::CATEGORY_EQUIPMENT,
 
  132                CreativeCategory::ITEMS => CreativeContentPacket::CATEGORY_ITEMS
 
  137                $groupIcon = $group->getIcon();
 
  141                $groupIcon->getNamedTag()->setInt(
"___GroupBugWorkaround___", $index);
 
  142                $groupName = $group->getName();
 
  145                    $translate($groupName),
 
  146                    $typeConverter->coreItemStackToNet($groupIcon)
 
 
static create(array $groups, array $items)