Removing achievements

This commit is contained in:
Dylan K. Taylor 2019-07-26 18:07:31 +01:00
parent b543744534
commit a91a86bf1d
7 changed files with 0 additions and 350 deletions

View File

@ -1006,7 +1006,6 @@ class Server{
"motd" => \pocketmine\NAME . " Server",
"server-port" => 19132,
"white-list" => false,
"announce-player-achievements" => true,
"max-players" => 20,
"gamemode" => 0,
"force-gamemode" => false,

View File

@ -23,13 +23,11 @@ declare(strict_types=1);
namespace pocketmine\entity\object;
use pocketmine\block\Wood;
use pocketmine\entity\Entity;
use pocketmine\event\entity\ItemDespawnEvent;
use pocketmine\event\entity\ItemSpawnEvent;
use pocketmine\event\inventory\InventoryPickupItemEvent;
use pocketmine\item\Item;
use pocketmine\item\ItemIds;
use pocketmine\nbt\tag\CompoundTag;
use pocketmine\network\mcpe\protocol\AddItemActorPacket;
use pocketmine\network\mcpe\protocol\TakeItemActorPacket;
@ -263,12 +261,6 @@ class ItemEntity extends Entity{
return;
}
if($item->getBlock() instanceof Wood){
$player->awardAchievement("mineWood");
}elseif($item->getId() === ItemIds::DIAMOND){
$player->awardAchievement("diamond");
}
$this->server->broadcastPacket($this->getViewers(), TakeItemActorPacket::create($player->getId(), $this->getId()));
$playerInventory->addItem(clone $item);

View File

@ -1,92 +0,0 @@
<?php
/*
*
* ____ _ _ __ __ _ __ __ ____
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* @author PocketMine Team
* @link http://www.pocketmine.net/
*
*
*/
declare(strict_types=1);
namespace pocketmine\event\player;
use pocketmine\command\CommandSender;
use pocketmine\event\Cancellable;
use pocketmine\event\CancellableTrait;
use pocketmine\lang\TextContainer;
use pocketmine\player\Player;
/**
* Called when a player is awarded an achievement
*/
class PlayerAchievementAwardedEvent extends PlayerEvent implements Cancellable{
use CancellableTrait;
/** @var string */
protected $achievement;
/** @var TextContainer|null */
private $message;
/** @var CommandSender[] */
private $broadcastRecipients;
/**
* @param Player $player
* @param string $achievementId
* @param TextContainer|null $message
* @param CommandSender[] $messageRecipients
*/
public function __construct(Player $player, string $achievementId, ?TextContainer $message, array $messageRecipients){
$this->player = $player;
$this->achievement = $achievementId;
$this->message = $message;
$this->broadcastRecipients = $messageRecipients;
}
/**
* @return string
*/
public function getAchievement() : string{
return $this->achievement;
}
/**
* @return TextContainer|null
*/
public function getMessage() : ?TextContainer{
return $this->message;
}
/**
* @param TextContainer|null $message
*/
public function setMessage(?TextContainer $message) : void{
$this->message = $message;
}
/**
* @return CommandSender[]
*/
public function getBroadcastRecipients() : array{
return $this->broadcastRecipients;
}
/**
* @param CommandSender[] $broadcastRecipients
*/
public function setBroadcastRecipients(array $broadcastRecipients) : void{
$this->broadcastRecipients = $broadcastRecipients;
}
}

View File

@ -26,7 +26,6 @@ namespace pocketmine\inventory\transaction;
use pocketmine\crafting\CraftingRecipe;
use pocketmine\event\inventory\CraftItemEvent;
use pocketmine\item\Item;
use pocketmine\item\ItemIds;
use pocketmine\network\mcpe\protocol\ContainerClosePacket;
use pocketmine\network\mcpe\protocol\types\ContainerIds;
use function array_pop;
@ -170,47 +169,4 @@ class CraftingTransaction extends InventoryTransaction{
*/
$this->source->sendDataPacket(ContainerClosePacket::create(ContainerIds::NONE));
}
public function execute() : bool{
if(parent::execute()){
foreach($this->outputs as $item){
switch($item->getId()){
case ItemIds::CRAFTING_TABLE:
$this->source->awardAchievement("buildWorkBench");
break;
case ItemIds::WOODEN_PICKAXE:
$this->source->awardAchievement("buildPickaxe");
break;
case ItemIds::FURNACE:
$this->source->awardAchievement("buildFurnace");
break;
case ItemIds::WOODEN_HOE:
$this->source->awardAchievement("buildHoe");
break;
case ItemIds::BREAD:
$this->source->awardAchievement("makeBread");
break;
case ItemIds::CAKE:
$this->source->awardAchievement("bakeCake");
break;
case ItemIds::STONE_PICKAXE:
case ItemIds::GOLDEN_PICKAXE:
case ItemIds::IRON_PICKAXE:
case ItemIds::DIAMOND_PICKAXE:
$this->source->awardAchievement("buildBetterPickaxe");
break;
case ItemIds::WOODEN_SWORD:
$this->source->awardAchievement("buildSword");
break;
case ItemIds::DIAMOND:
$this->source->awardAchievement("diamond");
break;
}
}
return true;
}
return false;
}
}

View File

@ -250,8 +250,6 @@ class InGamePacketHandler extends PacketHandler{
return false;
}
//TODO: fix achievement for getting iron from furnace
}
return true;

View File

@ -1,125 +0,0 @@
<?php
/*
*
* ____ _ _ __ __ _ __ __ ____
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* @author PocketMine Team
* @link http://www.pocketmine.net/
*
*
*/
declare(strict_types=1);
namespace pocketmine\player;
/**
* Handles the achievement list and a bit more
*/
abstract class Achievement{
/**
* @var array[]
*/
public static $list = [
/*"openInventory" => array(
"name" => "Taking Inventory",
"requires" => [],
),*/
"mineWood" => [
"name" => "Getting Wood",
"requires" => [ //"openInventory",
]
],
"buildWorkBench" => [
"name" => "Benchmarking",
"requires" => [
"mineWood"
]
],
"buildPickaxe" => [
"name" => "Time to Mine!",
"requires" => [
"buildWorkBench"
]
],
"buildFurnace" => [
"name" => "Hot Topic",
"requires" => [
"buildPickaxe"
]
],
"acquireIron" => [
"name" => "Acquire hardware",
"requires" => [
"buildFurnace"
]
],
"buildHoe" => [
"name" => "Time to Farm!",
"requires" => [
"buildWorkBench"
]
],
"makeBread" => [
"name" => "Bake Bread",
"requires" => [
"buildHoe"
]
],
"bakeCake" => [
"name" => "The Lie",
"requires" => [
"buildHoe"
]
],
"buildBetterPickaxe" => [
"name" => "Getting an Upgrade",
"requires" => [
"buildPickaxe"
]
],
"buildSword" => [
"name" => "Time to Strike!",
"requires" => [
"buildWorkBench"
]
],
"diamonds" => [
"name" => "DIAMONDS!",
"requires" => [
"acquireIron"
]
]
];
/**
* @param string $achievementId
* @param string $achievementName
* @param array $requires
*
* @return bool
*/
public static function add(string $achievementId, string $achievementName, array $requires = []) : bool{
if(!isset(Achievement::$list[$achievementId])){
Achievement::$list[$achievementId] = [
"name" => $achievementName,
"requires" => $requires
];
return true;
}
return false;
}
}

View File

@ -41,7 +41,6 @@ use pocketmine\event\entity\EntityDamageByEntityEvent;
use pocketmine\event\entity\EntityDamageEvent;
use pocketmine\event\inventory\InventoryCloseEvent;
use pocketmine\event\inventory\InventoryOpenEvent;
use pocketmine\event\player\PlayerAchievementAwardedEvent;
use pocketmine\event\player\PlayerBedEnterEvent;
use pocketmine\event\player\PlayerBedLeaveEvent;
use pocketmine\event\player\PlayerBlockPickEvent;
@ -78,7 +77,6 @@ use pocketmine\item\ItemUseResult;
use pocketmine\lang\TextContainer;
use pocketmine\lang\TranslationContainer;
use pocketmine\math\Vector3;
use pocketmine\nbt\tag\ByteTag;
use pocketmine\nbt\tag\CompoundTag;
use pocketmine\nbt\tag\DoubleTag;
use pocketmine\nbt\tag\IntTag;
@ -108,7 +106,6 @@ use pocketmine\world\particle\PunchBlockParticle;
use pocketmine\world\Position;
use pocketmine\world\World;
use function abs;
use function array_filter;
use function assert;
use function ceil;
use function count;
@ -190,8 +187,6 @@ class Player extends Human implements CommandSender, ChunkLoader, ChunkListener,
/** @var bool */
protected $removeFormat = true;
/** @var bool[] name of achievement => bool */
protected $achievements = [];
/** @var int */
protected $firstPlayed;
/** @var int */
@ -370,15 +365,6 @@ class Player extends Human implements CommandSender, ChunkLoader, ChunkListener,
$this->setNameTagAlwaysVisible();
$this->setCanClimb();
$this->achievements = [];
$achievements = $nbt->getCompoundTag("Achievements");
if($achievements !== null){
/** @var ByteTag $tag */
foreach($achievements as $name => $tag){
$this->achievements[$name] = $tag->getValue() !== 0;
}
}
if(!$this->hasValidSpawnPosition()){
if(($world = $this->server->getWorldManager()->getWorldByName($nbt->getString("SpawnLevel", ""))) instanceof World){
$this->spawnPosition = new Position($nbt->getInt("SpawnX"), $nbt->getInt("SpawnY"), $nbt->getInt("SpawnZ"), $world);
@ -1122,64 +1108,6 @@ class Player extends Human implements CommandSender, ChunkLoader, ChunkListener,
}
}
/**
* @param string $achievementId
*
* @return bool
*/
public function hasAchievement(string $achievementId) : bool{
if(!isset(Achievement::$list[$achievementId])){
return false;
}
return $this->achievements[$achievementId] ?? false;
}
/**
* @param string $achievementId
*
* @return bool
*/
public function awardAchievement(string $achievementId) : bool{
if(isset(Achievement::$list[$achievementId]) and !$this->hasAchievement($achievementId)){
foreach(Achievement::$list[$achievementId]["requires"] as $requirementId){
if(!$this->hasAchievement($requirementId)){
return false;
}
}
$ev = new PlayerAchievementAwardedEvent(
$this,
$achievementId,
new TranslationContainer("chat.type.achievement", [$this->getDisplayName(), TextFormat::GREEN . Achievement::$list[$achievementId]["name"] . TextFormat::RESET]),
$this->server->getConfigBool("announce-player-achievements", true) ? array_filter(PermissionManager::getInstance()->getPermissionSubscriptions(Server::BROADCAST_CHANNEL_USERS), function($v){
return $v instanceof CommandSender;
}) : [$this]
);
$ev->call();
if(!$ev->isCancelled()){
$this->achievements[$achievementId] = true;
if(($message = $ev->getMessage()) !== null){
$this->server->broadcastMessage($message, $ev->getBroadcastRecipients());
}
return true;
}else{
return false;
}
}
return false;
}
/**
* @param string $achievementId
*/
public function removeAchievement(string $achievementId){
if($this->hasAchievement($achievementId)){
$this->achievements[$achievementId] = false;
}
}
/**
* @return GameMode
*/
@ -2334,12 +2262,6 @@ class Player extends Human implements CommandSender, ChunkLoader, ChunkListener,
}
}
$achievements = new CompoundTag();
foreach($this->achievements as $achievement => $status){
$achievements->setByte($achievement, $status ? 1 : 0);
}
$nbt->setTag("Achievements", $achievements);
$nbt->setInt("playerGameType", $this->gamemode->getMagicNumber());
$nbt->setLong("firstPlayed", $this->firstPlayed);
$nbt->setLong("lastPlayed", (int) floor(microtime(true) * 1000));