Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- namespace InstantFurnace;
- use pocketmine\plugin\PluginBase;
- use pocketmine\event\Listener;
- use pocketmine\event\player\PlayerInteractEvent;
- use pocketmine\inventory\CraftingManager;
- use pocketmine\inventory\Fuel;
- use pocketmine\block\Block;
- use pocketmine\item\Item;
- use pocketmine\math\Vector3;
- use pocketmine\tile\Chest;
- class Main extends PluginBase implements Listener{
- public function onEnable(){
- $this->enabled = false;
- $this->getServer()->getPluginManager()->registerEvents($this, $this);
- $this->nametag = array();
- }
- public function onBlockTouch(PlayerInteractEvent $ev){
- if(!($ev->getBlock()->getSide(Vector3::SIDE_UP)->getID() === Block::CHEST and $ev->getBlock()->getID() === Block::COBBLESTONE)): return; endif;
- $furnaceDown = $ev->getBlock()->getSide(Vector3::SIDE_UP, 1);
- $furnaceUp = $ev->getBlock()->getSide(Vector3::SIDE_UP, 2);
- echo $furnaceDown.', '.$furnaceUp;
- $chunk = $furnaceDown->getLevel()->getChunk($furnaceDown->x >> 4, $furnaceDown->z >> 4);
- $downTile = $ev->getPlayer()->getLevel()->getTile(new Vector3($ev->getBlock()->x, $ev->getBlock()->y + 1, $ev->getBlock()->z));
- $upTile = $ev->getPlayer()->getLevel()->getTile(new Vector3($ev->getBlock()->x,$ev->getBlock()->y + 2, $ev->getBlock()->z));
- //if(!$downTile instanceof Chest or $upTile instanceof Chest ): echo '!!!'; return; endif;
- //if($downTile === null or $upTile === null) return;
- //if($furnaceUp->getID() == 54 and $downTile->isPaired() === false and $upTile->isPaired() === false and
- if($furnaceUp->getID() == 54 and
- (
- (
- $furnaceDown->getSide(Vector3::SIDE_NORTH)->getID() === Block::COBBLESTONE and
- $furnaceDown->getSide(Vector3::SIDE_SOUTH)->getID() === Block::COBBLESTONE and
- $furnaceUp->getSide(Vector3::SIDE_WEST)->getID() === Block::AIR and
- $furnaceUp->getSide(Vector3::SIDE_EAST)->getID() === Block::AIR
- )
- or
- (
- $furnaceDown->getSide(Vector3::SIDE_WEST)->getID() === Block::COBBLESTONE and
- $furnaceDown->getSide(Vector3::SIDE_EAST)->getID() === Block::COBBLESTONE and
- $furnaceUp->getSide(Vector3::SIDE_NORTH)->getID() === Block::AIR and
- $furnaceUp->getSide(Vector3::SIDE_SOUTH)->getID() === Block::AIR
- )
- )
- ){
- //$ev->setCancelled();
- $ev->getPlayer()->sendMessage("[InstantFurnace] Smelting...");
- $this->smeltInstant($upTile, $downTile, $ev->getPlayer());
- $ev->getPlayer()->sendMessage("[InstantFurnace] Complete!");
- }
- }
- public function smeltInstant($up, $down, $owner){
- $fuel = 0;
- $left = 0;
- $itemCount = 0;
- //Count all fuels
- for($slot = 0; $slot <= 27; $slot++){
- $item = $down->getItem($slot);
- $fuel += isset(Fuel::$duration[$item->getID()]) ? Fuel::$duration[$item->getID()] : 0;
- }
- $allFuel = $fuel;
- //Smelt
- for($slot = 0; $slot <= 27; $slot++){
- $item = $up->getItem($slot);
- $itemCount = $item->getCount();
- if($this->getServer()->getCraftingManager()->matchFurnaceRecipe($item) !== null){
- $give = $this->getServer()->getCraftingManager()->matchFurnaceRecipe($item)->getResult();
- $giveItem = $give->setCount(1);
- while($fuel >= 200 and $itemCount > 0){
- $fuel -= 200;
- $itemCount--;
- $owner->getInventory()->addItem($giveItem);
- }
- $up->setItem($slot, new Item(
- $itemCount === 0 ? Item::AIR : $item->getID(),
- $itemCount === 0 ? 0 : $item->getDamage(),
- $itemCount === 0 ? 1 : $itemCount,
- $itemCount === 0 ? 'Air' : $item->getName()));
- }
- }
- //Caculate left fuel slots
- $usedFuel = $allFuel - $fuel;
- for($slot = 0; $slot <= 27; $slot++){
- if(isset(Fuel::$duration[$down->getItem($slot)->getID()])){
- $cnt = $down->getItem($slot)->getCount();
- while($usedFuel >= 0 and $cnt > 0){
- $cnt--;
- $usedFuel -= 200;
- }
- $item = $down->getItem($slot);
- $down->setItem($slot, new Item(
- $cnt === 0 ? Item::AIR : $item->getID(),
- $cnt === 0 ? 0 : $item->getDamage(),
- $cnt === 0 ? 1 : $itemCount,
- $cnt === 0 ? 'Air' : $item->getName()));
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement