40 private const TAG_FIRST_INPUT_ITEM =
"Item1";
41 private const TAG_SECOND_INPUT_ITEM =
"Item2";
42 private const TAG_THIRD_INPUT_ITEM =
"Item3";
43 private const TAG_FOURTH_INPUT_ITEM =
"Item4";
45 private const TAG_FIRST_COOKING_TIME =
"ItemTime1";
46 private const TAG_SECOND_COOKING_TIME =
"ItemTime2";
47 private const TAG_THIRD_COOKING_TIME =
"ItemTime3";
48 private const TAG_FOURTH_COOKING_TIME =
"ItemTime4";
52 private array $cookingTimes = [];
55 parent::__construct($world, $pos);
57 $this->inventory->setMaxStackSize(1);
58 $this->inventory->getListeners()->add(CallbackInventoryListener::onAnyChange(
59 static function(
Inventory $unused) use ($world, $pos) :
void{
61 if($block instanceof BlockCampfire){
68 public function getInventory() :
Inventory{
69 return $this->inventory;
72 public function getRealInventory() :
Inventory{
73 return $this->inventory;
81 return $this->cookingTimes;
89 $this->cookingTimes = $cookingTimes;
92 public function readSaveData(
CompoundTag $nbt) : void{
94 $listeners = $this->inventory->getListeners()->toArray();
95 $this->inventory->getListeners()->remove(...$listeners);
97 $baseErrorContext =
"Campfire ($this->position)";
99 [0, self::TAG_FIRST_INPUT_ITEM, self::TAG_FIRST_COOKING_TIME],
100 [1, self::TAG_SECOND_INPUT_ITEM, self::TAG_SECOND_COOKING_TIME],
101 [2, self::TAG_THIRD_INPUT_ITEM, self::TAG_THIRD_COOKING_TIME],
102 [3, self::TAG_FOURTH_INPUT_ITEM, self::TAG_FOURTH_COOKING_TIME],
103 ] as [$slot, $itemTag, $cookingTimeTag]){
105 $items[$slot] = Item::safeNbtDeserialize($tag,
"$baseErrorContext slot $slot");
107 if(($tag = $nbt->
getTag($cookingTimeTag)) instanceof IntTag){
108 $this->cookingTimes[$slot] = $tag->getValue();
111 $this->inventory->setContents($items);
112 $this->inventory->getListeners()->add(...$listeners);
117 [0, self::TAG_FIRST_INPUT_ITEM, self::TAG_FIRST_COOKING_TIME],
118 [1, self::TAG_SECOND_INPUT_ITEM, self::TAG_SECOND_COOKING_TIME],
119 [2, self::TAG_THIRD_INPUT_ITEM, self::TAG_THIRD_COOKING_TIME],
120 [3, self::TAG_FOURTH_INPUT_ITEM, self::TAG_FOURTH_COOKING_TIME],
121 ] as [$slot, $itemTag, $cookingTimeTag]){
122 $item = $this->inventory->getItem($slot);
123 if(!$item->isNull()){
124 $nbt->setTag($itemTag, $item->nbtSerialize());
125 if(isset($this->cookingTimes[$slot])){
126 $nbt->setInt($cookingTimeTag, $this->cookingTimes[$slot]);
134 0 => self::TAG_FIRST_INPUT_ITEM,
135 1 => self::TAG_SECOND_INPUT_ITEM,
136 2 => self::TAG_THIRD_INPUT_ITEM,
137 3 => self::TAG_FOURTH_INPUT_ITEM
139 $item = $this->inventory->getItem($slot);
140 if(!$item->isNull()){
141 $nbt->setTag($tag, TypeConverter::getInstance()->getItemTranslator()->toNetworkNbt($item));