Guest User

Untitled

a guest
Nov 16th, 2014
204
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <?php
  2.  
  3. namespace InstantFurnace;
  4.  
  5. use pocketmine\plugin\PluginBase;
  6. use pocketmine\event\Listener;
  7. use pocketmine\event\player\PlayerInteractEvent;
  8. use pocketmine\inventory\CraftingManager;
  9. use pocketmine\inventory\Fuel;
  10. use pocketmine\block\Block;
  11. use pocketmine\item\Item;
  12. use pocketmine\math\Vector3;
  13. use pocketmine\tile\Chest;
  14.  
  15. class Main extends PluginBase implements Listener{
  16.    
  17.     public function onEnable(){
  18.         $this->enabled = false;
  19.         $this->getServer()->getPluginManager()->registerEvents($this, $this);
  20.         $this->nametag = array();
  21.         }
  22.    
  23.     public function onBlockTouch(PlayerInteractEvent $ev){
  24.         if(!($ev->getBlock()->getSide(Vector3::SIDE_UP)->getID() === Block::CHEST and $ev->getBlock()->getID() === Block::COBBLESTONE)): return; endif;
  25.         $furnaceDown = $ev->getBlock()->getSide(Vector3::SIDE_UP, 1);
  26.         $furnaceUp = $ev->getBlock()->getSide(Vector3::SIDE_UP, 2);
  27.         echo $furnaceDown.',    '.$furnaceUp;
  28.         $chunk = $furnaceDown->getLevel()->getChunk($furnaceDown->x >> 4, $furnaceDown->z >> 4);
  29.         $downTile = $ev->getPlayer()->getLevel()->getTile(new Vector3($ev->getBlock()->x, $ev->getBlock()->y + 1, $ev->getBlock()->z));
  30.         $upTile = $ev->getPlayer()->getLevel()->getTile(new Vector3($ev->getBlock()->x,$ev->getBlock()->y + 2, $ev->getBlock()->z));
  31.         //if(!$downTile instanceof Chest or $upTile instanceof Chest ): echo '!!!'; return; endif;
  32.         //if($downTile === null or $upTile === null) return;
  33.         //if($furnaceUp->getID() == 54 and $downTile->isPaired() === false and $upTile->isPaired() === false and
  34.         if($furnaceUp->getID() == 54 and
  35.            
  36.             (
  37.                 (
  38.                 $furnaceDown->getSide(Vector3::SIDE_NORTH)->getID() === Block::COBBLESTONE and
  39.                 $furnaceDown->getSide(Vector3::SIDE_SOUTH)->getID() === Block::COBBLESTONE and
  40.                 $furnaceUp->getSide(Vector3::SIDE_WEST)->getID() === Block::AIR and
  41.                 $furnaceUp->getSide(Vector3::SIDE_EAST)->getID() === Block::AIR
  42.                 )
  43.                
  44.                 or
  45.                
  46.                 (
  47.                 $furnaceDown->getSide(Vector3::SIDE_WEST)->getID() === Block::COBBLESTONE and
  48.                 $furnaceDown->getSide(Vector3::SIDE_EAST)->getID() === Block::COBBLESTONE and
  49.                 $furnaceUp->getSide(Vector3::SIDE_NORTH)->getID() === Block::AIR and
  50.                 $furnaceUp->getSide(Vector3::SIDE_SOUTH)->getID() === Block::AIR               
  51.                 )
  52.             )
  53.            
  54.             ){
  55.             //$ev->setCancelled();
  56.             $ev->getPlayer()->sendMessage("[InstantFurnace] Smelting...");
  57.             $this->smeltInstant($upTile, $downTile, $ev->getPlayer());
  58.             $ev->getPlayer()->sendMessage("[InstantFurnace] Complete!");
  59.         }
  60.     }
  61.    
  62.     public function smeltInstant($up, $down, $owner){
  63.         $fuel = 0;
  64.         $left = 0;
  65.         $itemCount = 0;
  66.         //Count all fuels
  67.         for($slot = 0; $slot <= 27; $slot++){
  68.             $item = $down->getItem($slot);
  69.             $fuel += isset(Fuel::$duration[$item->getID()]) ? Fuel::$duration[$item->getID()] : 0;
  70.         }
  71.         $allFuel = $fuel;
  72.         //Smelt
  73.         for($slot = 0; $slot <= 27; $slot++){
  74.             $item = $up->getItem($slot);
  75.             $itemCount = $item->getCount();
  76.             if($this->getServer()->getCraftingManager()->matchFurnaceRecipe($item) !== null){
  77.                 $give = $this->getServer()->getCraftingManager()->matchFurnaceRecipe($item)->getResult();
  78.                 $giveItem = $give->setCount(1);
  79.                 while($fuel >= 200 and $itemCount > 0){
  80.                     $fuel -= 200;
  81.                     $itemCount--;
  82.                     $owner->getInventory()->addItem($giveItem);
  83.                 }
  84.                 $up->setItem($slot, new Item(
  85.                                                 $itemCount === 0 ? Item::AIR : $item->getID(),
  86.                                                 $itemCount === 0 ? 0 : $item->getDamage(),
  87.                                                 $itemCount === 0 ? 1 : $itemCount,
  88.                                                 $itemCount === 0 ? 'Air' : $item->getName()));
  89.             }
  90.         }
  91.         //Caculate left fuel slots
  92.         $usedFuel = $allFuel - $fuel;
  93.         for($slot = 0; $slot <= 27; $slot++){
  94.             if(isset(Fuel::$duration[$down->getItem($slot)->getID()])){
  95.                 $cnt = $down->getItem($slot)->getCount();
  96.                 while($usedFuel >= 0 and $cnt > 0){
  97.                     $cnt--;
  98.                     $usedFuel -= 200;
  99.                 }
  100.                 $item = $down->getItem($slot);
  101.                 $down->setItem($slot, new Item(
  102.                                                 $cnt === 0 ? Item::AIR : $item->getID(),
  103.                                                 $cnt === 0 ? 0 : $item->getDamage(),
  104.                                                 $cnt === 0 ? 1 : $itemCount,
  105.                                                 $cnt === 0 ? 'Air' : $item->getName()));
  106.             }
  107.         }
  108.     }
  109.    
  110. }
RAW Paste Data