mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-05-10 15:59:39 +00:00
Removing achievements
This commit is contained in:
parent
b543744534
commit
a91a86bf1d
@ -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,
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -250,8 +250,6 @@ class InGamePacketHandler extends PacketHandler{
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
//TODO: fix achievement for getting iron from furnace
|
||||
}
|
||||
|
||||
return true;
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
@ -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));
|
||||
|
Loading…
x
Reference in New Issue
Block a user