Skip to content

Commit

Permalink
Fixed bug, so blocks taken from creative or crafted don't spawn ores
Browse files Browse the repository at this point in the history
  • Loading branch information
RKAbdul authored Oct 22, 2020
1 parent 26859c3 commit 7b1de36
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 13 deletions.
45 changes: 33 additions & 12 deletions src/RKAbdul/OreSpawners/EventListener.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
use pocketmine\event\Listener;
use pocketmine\event\block\BlockUpdateEvent;
use pocketmine\event\block\BlockBreakEvent;
use pocketmine\event\block\BlockPlaceEvent;
use pocketmine\event\player\PlayerInteractEvent;
use pocketmine\item\Item;
use pocketmine\block\Block;
Expand Down Expand Up @@ -44,10 +45,12 @@ public function onBlockUpdate(BlockUpdateEvent $event){
};

if (in_array($bbelow->getId(), $blocks)) {
$tile = $event->getBlock()->getLevel()->getTile($bbelow);
if (!$tile instanceof SimpleTile) return;
$ore = $this->checkBlock($bbelow);
$delay = $this->getDelay($bbelow);
if (!$event->isCancelled()) {
$event->setCancelled(true);
$event->setCancelled(true);
if ($event->getBlock()->getId() == $ore->getId()) return;
$this->plugin->getScheduler()->scheduleDelayedTask(new ClosureTask( function (int $currentTick) use ($event, $ore): void {
if ($event->getBlock()->getLevel() !== null){
Expand All @@ -58,6 +61,26 @@ public function onBlockUpdate(BlockUpdateEvent $event){
}
}
}

public function onBlockPlace(BlockPlaceEvent $event) {
$block = $event->getBlock();
$item = $event->getItem();
$blocks = [];

foreach(array_values($this->plugin->getConfig()->get("ore-generator-blocks")) as $blockID) {
array_push($blocks, $blockID);
};

if (in_array($block->getId(), $blocks)) {
if ($item->getNamedTag()->hasTag("orespawner")) {
$tile = $event->getPlayer()->getLevel()->getTile($event->getBlock()->asVector3());
if (!$tile instanceof SimpleTile) {
$tileinfo = new TileInfo($event->getBlock(), ["id" => "simpleTile", "stacked" => 1]);
new SimpleTile($event->getPlayer()->getLevel(), $tileinfo);
}
}
}
}

public function onPlayerInteract(PlayerInteractEvent $event) {
if($this->cfg["stacking"] == false || $event->isCancelled()) return;
Expand All @@ -71,18 +94,14 @@ public function onPlayerInteract(PlayerInteractEvent $event) {
$tile = $event->getPlayer()->getLevel()->getTile($event->getBlock()->asVector3());
if($player->getGamemode() == 1) return $player->sendMessage(TF::RED . "You can only use stacking system in survival");
$stacked = $tile instanceof SimpleTile ? $tile->getData("stacked")->getValue() : 1;
if (!in_array($item->getId(), $blocks) || $event->getBlock()->getId() != $item->getId()) return $player->sendMessage("§aThere are currently " . TF::YELLOW . $stacked. " §aStacked orespawners");
if ($tile instanceof SimpleTile) {
if ($stacked >= intval($this->cfg["max"])) {
$event->setCancelled(true);
$player->sendMessage(str_replace("&", "§", $this->cfg["limit-reached"] ?? "&cYou can't stack anymore orespawners, you have reached the limit"));
return;
}
$tile->setData("stacked", $stacked + 1);
} else {
$tileinfo = new TileInfo($event->getBlock(), ["id" => "simpleTile", "stacked" => 2]);
new SimpleTile($event->getPlayer()->getLevel(), $tileinfo);
if (!$tile instanceof SimpleTile) return;
if (!in_array($item->getId(), $blocks) || $event->getBlock()->getId() != $item->getId()) return $player->sendMessage("§aThere are currently " . TF::YELLOW . $stacked. " §astacked OreSpawners");
if ($stacked >= intval($this->cfg["max"])) {
$event->setCancelled(true);
$player->sendMessage(str_replace("&", "§", $this->cfg["limit-reached"] ?? "&cYou can't stack anymore orespawners, you have reached the limit"));
return;
}
$tile->setData("stacked", $stacked + 1);
$event->setCancelled(true);
$item->setCount($item->getCount() - 1);
$player->getInventory()->setItem($player->getInventory()->getHeldItemIndex(), $item);
Expand Down Expand Up @@ -116,6 +135,8 @@ public function onBlockBreak(BlockBreakEvent $event){
};
if ($event->isCancelled()) return;
if (in_array($event->getBlock()->getId(), $blocks)) {
$tile = $event->getBlock()->getLevel()->getTile($block);
if (!$tile instanceof SimpleTile) return;
$tile = $player->getLevel()->getTile($block->asVector3());
$type = $this->checkSpawner($block);
$count = $tile instanceof SimpleTile ? $tile->getData("stacked")->getValue() : 1;
Expand Down
4 changes: 3 additions & 1 deletion src/RKAbdul/OreSpawners/Main.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
use pocketmine\command\Command;
use pocketmine\item\Item;
use pocketmine\item\ItemFactory;
use pocketmine\nbt\tag\StringTag;
use DenielWorld\EzTiles\EzTiles;

class Main extends PluginBase {
Expand Down Expand Up @@ -80,6 +81,7 @@ public function createOreSpawner(string $ore, int $amount) {
$gencreated->setCustomName($name);
$lore = str_replace(["{ore}", "&"], [$ore, "§"], $this->cfg["ore-generators-lore"] ?? "Place it down, and ore blocks will spawn above it");
$gencreated->setLore([$lore]);
$gencreated->setNamedTagEntry(new StringTag("orespawner", "true"));
return $gencreated;
}
}
}

0 comments on commit 7b1de36

Please sign in to comment.