mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-05-13 17:29:44 +00:00
Merge branch 'release/3.2'
This commit is contained in:
commit
4fb1f8dd76
@ -302,9 +302,9 @@ class SimpleCommandMap implements CommandMap{
|
|||||||
}
|
}
|
||||||
|
|
||||||
$targets = [];
|
$targets = [];
|
||||||
|
$bad = [];
|
||||||
|
$recursive = [];
|
||||||
|
|
||||||
$bad = "";
|
|
||||||
$recursive = "";
|
|
||||||
foreach($commandStrings as $commandString){
|
foreach($commandStrings as $commandString){
|
||||||
$args = explode(" ", $commandString);
|
$args = explode(" ", $commandString);
|
||||||
$commandName = "";
|
$commandName = "";
|
||||||
@ -312,27 +312,21 @@ class SimpleCommandMap implements CommandMap{
|
|||||||
|
|
||||||
|
|
||||||
if($command === null){
|
if($command === null){
|
||||||
if(strlen($bad) > 0){
|
$bad[] = $commandString;
|
||||||
$bad .= ", ";
|
|
||||||
}
|
|
||||||
$bad .= $commandString;
|
|
||||||
}elseif($commandName === $alias){
|
}elseif($commandName === $alias){
|
||||||
if($recursive !== ""){
|
$recursive[] = $commandString;
|
||||||
$recursive .= ", ";
|
|
||||||
}
|
|
||||||
$recursive .= $commandString;
|
|
||||||
}else{
|
}else{
|
||||||
$targets[] = $commandString;
|
$targets[] = $commandString;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if($recursive !== ""){
|
if(!empty($recursive)){
|
||||||
$this->server->getLogger()->warning($this->server->getLanguage()->translateString("pocketmine.command.alias.recursive", [$alias, $recursive]));
|
$this->server->getLogger()->warning($this->server->getLanguage()->translateString("pocketmine.command.alias.recursive", [$alias, implode(", ", $recursive)]));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(strlen($bad) > 0){
|
if(!empty($bad)){
|
||||||
$this->server->getLogger()->warning($this->server->getLanguage()->translateString("pocketmine.command.alias.notFound", [$alias, $bad]));
|
$this->server->getLogger()->warning($this->server->getLanguage()->translateString("pocketmine.command.alias.notFound", [$alias, implode(", ", $bad)]));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,6 +25,7 @@ namespace pocketmine\command\defaults;
|
|||||||
|
|
||||||
use pocketmine\command\CommandSender;
|
use pocketmine\command\CommandSender;
|
||||||
use pocketmine\lang\TranslationContainer;
|
use pocketmine\lang\TranslationContainer;
|
||||||
|
use pocketmine\plugin\Plugin;
|
||||||
use pocketmine\utils\TextFormat;
|
use pocketmine\utils\TextFormat;
|
||||||
|
|
||||||
class PluginsCommand extends VanillaCommand{
|
class PluginsCommand extends VanillaCommand{
|
||||||
@ -43,20 +44,12 @@ class PluginsCommand extends VanillaCommand{
|
|||||||
if(!$this->testPermission($sender)){
|
if(!$this->testPermission($sender)){
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
$this->sendPluginList($sender);
|
|
||||||
|
$list = array_map(function(Plugin $plugin) : string{
|
||||||
|
return ($plugin->isEnabled() ? TextFormat::GREEN : TextFormat::RED) . $plugin->getDescription()->getFullName();
|
||||||
|
}, $sender->getServer()->getPluginManager()->getPlugins());
|
||||||
|
|
||||||
|
$sender->sendMessage(new TranslationContainer("pocketmine.command.plugins.success", [count($list), implode(TextFormat::WHITE . ", ", $list)]));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function sendPluginList(CommandSender $sender){
|
|
||||||
$list = "";
|
|
||||||
foreach(($plugins = $sender->getServer()->getPluginManager()->getPlugins()) as $plugin){
|
|
||||||
if(strlen($list) > 0){
|
|
||||||
$list .= TextFormat::WHITE . ", ";
|
|
||||||
}
|
|
||||||
$list .= $plugin->isEnabled() ? TextFormat::GREEN : TextFormat::RED;
|
|
||||||
$list .= $plugin->getDescription()->getFullName();
|
|
||||||
}
|
|
||||||
|
|
||||||
$sender->sendMessage(new TranslationContainer("pocketmine.command.plugins.success", [count($plugins), $list]));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -49,7 +49,7 @@ class TeleportCommand extends VanillaCommand{
|
|||||||
}
|
}
|
||||||
|
|
||||||
$args = array_values(array_filter($args, function($arg){
|
$args = array_values(array_filter($args, function($arg){
|
||||||
return strlen($arg) > 0;
|
return $arg !== "";
|
||||||
}));
|
}));
|
||||||
if(count($args) < 1 or count($args) > 6){
|
if(count($args) < 1 or count($args) > 6){
|
||||||
throw new InvalidCommandSyntaxException();
|
throw new InvalidCommandSyntaxException();
|
||||||
|
@ -661,13 +661,8 @@ abstract class Living extends Entity implements Damageable{
|
|||||||
$this->attack($ev);
|
$this->attack($ev);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!$this->canBreathe()){
|
if($this->doAirSupplyTick($tickDiff)){
|
||||||
$this->setBreathing(false);
|
|
||||||
$this->doAirSupplyTick($tickDiff);
|
|
||||||
$hasUpdate = true;
|
$hasUpdate = true;
|
||||||
}elseif(!$this->isBreathing()){
|
|
||||||
$this->setBreathing(true);
|
|
||||||
$this->setAirSupplyTicks($this->getMaxAirSupplyTicks());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -696,22 +691,42 @@ abstract class Living extends Entity implements Damageable{
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Ticks the entity's air supply when it cannot breathe.
|
* Ticks the entity's air supply, consuming it when underwater and regenerating it when out of water.
|
||||||
|
*
|
||||||
* @param int $tickDiff
|
* @param int $tickDiff
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
*/
|
*/
|
||||||
protected function doAirSupplyTick(int $tickDiff) : void{
|
protected function doAirSupplyTick(int $tickDiff) : bool{
|
||||||
if(($respirationLevel = $this->armorInventory->getHelmet()->getEnchantmentLevel(Enchantment::RESPIRATION)) <= 0 or
|
$ticks = $this->getAirSupplyTicks();
|
||||||
lcg_value() <= (1 / ($respirationLevel + 1))
|
$oldTicks = $ticks;
|
||||||
){
|
if(!$this->canBreathe()){
|
||||||
$ticks = $this->getAirSupplyTicks() - $tickDiff;
|
$this->setBreathing(false);
|
||||||
|
|
||||||
if($ticks <= -20){
|
if(($respirationLevel = $this->armorInventory->getHelmet()->getEnchantmentLevel(Enchantment::RESPIRATION)) <= 0 or
|
||||||
$this->setAirSupplyTicks(0);
|
lcg_value() <= (1 / ($respirationLevel + 1))
|
||||||
$this->onAirExpired();
|
){
|
||||||
}else{
|
$ticks -= $tickDiff;
|
||||||
$this->setAirSupplyTicks($ticks);
|
if($ticks <= -20){
|
||||||
|
$ticks = 0;
|
||||||
|
$this->onAirExpired();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}elseif(!$this->isBreathing()){
|
||||||
|
if($ticks < ($max = $this->getMaxAirSupplyTicks())){
|
||||||
|
$ticks += $tickDiff * 5;
|
||||||
|
}
|
||||||
|
if($ticks >= $max){
|
||||||
|
$ticks = $max;
|
||||||
|
$this->setBreathing(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if($ticks !== $oldTicks){
|
||||||
|
$this->setAirSupplyTicks($ticks);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $ticks !== $oldTicks;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -377,7 +377,7 @@ class LevelDB extends BaseLevelProvider{
|
|||||||
|
|
||||||
/** @var CompoundTag[] $entities */
|
/** @var CompoundTag[] $entities */
|
||||||
$entities = [];
|
$entities = [];
|
||||||
if(($entityData = $this->db->get($index . self::TAG_ENTITY)) !== false and strlen($entityData) > 0){
|
if(($entityData = $this->db->get($index . self::TAG_ENTITY)) !== false and $entityData !== ""){
|
||||||
$entities = $nbt->read($entityData, true);
|
$entities = $nbt->read($entityData, true);
|
||||||
if(!is_array($entities)){
|
if(!is_array($entities)){
|
||||||
$entities = [$entities];
|
$entities = [$entities];
|
||||||
@ -392,7 +392,7 @@ class LevelDB extends BaseLevelProvider{
|
|||||||
}
|
}
|
||||||
|
|
||||||
$tiles = [];
|
$tiles = [];
|
||||||
if(($tileData = $this->db->get($index . self::TAG_BLOCK_ENTITY)) !== false and strlen($tileData) > 0){
|
if(($tileData = $this->db->get($index . self::TAG_BLOCK_ENTITY)) !== false and $tileData !== ""){
|
||||||
$tiles = $nbt->read($tileData, true);
|
$tiles = $nbt->read($tileData, true);
|
||||||
if(!is_array($tiles)){
|
if(!is_array($tiles)){
|
||||||
$tiles = [$tiles];
|
$tiles = [$tiles];
|
||||||
@ -402,7 +402,7 @@ class LevelDB extends BaseLevelProvider{
|
|||||||
//TODO: extra data should be converted into blockstorage layers (first they need to be implemented!)
|
//TODO: extra data should be converted into blockstorage layers (first they need to be implemented!)
|
||||||
/*
|
/*
|
||||||
$extraData = [];
|
$extraData = [];
|
||||||
if(($extraRawData = $this->db->get($index . self::TAG_BLOCK_EXTRA_DATA)) !== false and strlen($extraRawData) > 0){
|
if(($extraRawData = $this->db->get($index . self::TAG_BLOCK_EXTRA_DATA)) !== false and $extraRawData !== ""){
|
||||||
$binaryStream->setBuffer($extraRawData, 0);
|
$binaryStream->setBuffer($extraRawData, 0);
|
||||||
$count = $binaryStream->getLInt();
|
$count = $binaryStream->getLInt();
|
||||||
for($i = 0; $i < $count; ++$i){
|
for($i = 0; $i < $count; ++$i){
|
||||||
|
@ -177,7 +177,7 @@ class RCONInstance extends Thread{
|
|||||||
$disconnect[$id] = $sock;
|
$disconnect[$id] = $sock;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if(strlen($payload) > 0){
|
if($payload !== ""){
|
||||||
$this->cmd = ltrim($payload);
|
$this->cmd = ltrim($payload);
|
||||||
$this->synchronized(function(){
|
$this->synchronized(function(){
|
||||||
$this->notifier->wakeupSleeper();
|
$this->notifier->wakeupSleeper();
|
||||||
|
@ -168,7 +168,7 @@ class BanEntry{
|
|||||||
}
|
}
|
||||||
|
|
||||||
$expire = trim(array_shift($str));
|
$expire = trim(array_shift($str));
|
||||||
if(strtolower($expire) !== "forever" and strlen($expire) > 0){
|
if($expire !== "" and strtolower($expire) !== "forever"){
|
||||||
$entry->setExpires(self::parseDate($expire));
|
$entry->setExpires(self::parseDate($expire));
|
||||||
}
|
}
|
||||||
if(empty($str)){
|
if(empty($str)){
|
||||||
|
Loading…
x
Reference in New Issue
Block a user