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);
98 [0, self::TAG_FIRST_INPUT_ITEM, self::TAG_FIRST_COOKING_TIME],
99 [1, self::TAG_SECOND_INPUT_ITEM, self::TAG_SECOND_COOKING_TIME],
100 [2, self::TAG_THIRD_INPUT_ITEM, self::TAG_THIRD_COOKING_TIME],
101 [3, self::TAG_FOURTH_INPUT_ITEM, self::TAG_FOURTH_COOKING_TIME],
102 ] as [$slot, $itemTag, $cookingTimeTag]){
104 $items[$slot] = Item::nbtDeserialize($tag);
106 if(($tag = $nbt->
getTag($cookingTimeTag)) instanceof IntTag){
107 $this->cookingTimes[$slot] = $tag->getValue();
110 $this->inventory->setContents($items);
111 $this->inventory->getListeners()->add(...$listeners);
116 [0, self::TAG_FIRST_INPUT_ITEM, self::TAG_FIRST_COOKING_TIME],
117 [1, self::TAG_SECOND_INPUT_ITEM, self::TAG_SECOND_COOKING_TIME],
118 [2, self::TAG_THIRD_INPUT_ITEM, self::TAG_THIRD_COOKING_TIME],
119 [3, self::TAG_FOURTH_INPUT_ITEM, self::TAG_FOURTH_COOKING_TIME],
120 ] as [$slot, $itemTag, $cookingTimeTag]){
121 $item = $this->inventory->getItem($slot);
122 if(!$item->isNull()){
123 $nbt->setTag($itemTag, $item->nbtSerialize());
124 if(isset($this->cookingTimes[$slot])){
125 $nbt->setInt($cookingTimeTag, $this->cookingTimes[$slot]);
133 0 => self::TAG_FIRST_INPUT_ITEM,
134 1 => self::TAG_SECOND_INPUT_ITEM,
135 2 => self::TAG_THIRD_INPUT_ITEM,
136 3 => self::TAG_FOURTH_INPUT_ITEM
138 $item = $this->inventory->getItem($slot);
139 if(!$item->isNull()){
140 $nbt->setTag($tag, TypeConverter::getInstance()->getItemTranslator()->toNetworkNbt($item));