Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
56 commits
Select commit Hold shift + click to select a range
3d8bb7d
Support 0.7.6
Mar 13, 2025
08d04e4
Support MCPE && MCPI 0.6.1 test && Fix MessagePacket in MCPE 0.7.4
Mar 15, 2025
ad42a6a
MCPE 0.5.0 Protocol List
yefengeeeeeeeeeee Mar 15, 2025
61ffae5
MCPE 0.5.0 Protocol List && Stupid PC
yefengeeeeeeeeeee Mar 16, 2025
7f70c87
MovePlayerPacket fixed
yefengeeeeeeeeeee Mar 16, 2025
8a14186
Merge branch 'kotyaralih:master' into master
yefengeeeeeeeeeee Mar 17, 2025
50cc72b
MovePlayerPacket fixed
yefengeeeeeeeeeee Mar 19, 2025
8988b22
Fixed logs
yefengeeeeeeeeeee Mar 19, 2025
6cfc8f1
Blame this changes xdd
yefengeeeeeeeeeee Mar 19, 2025
e428f39
Support MCPE 0.3.2 - 0.6.0
yefengeeeeeeeeeee Mar 22, 2025
b5f11e5
Merge branch 'master' into masteruwu
yefengeeeeeeeeeee Mar 22, 2025
a05848c
Fuck Merge Conflict
yefengeeeeeeeeeee Mar 23, 2025
e4538e1
Make Merge More Easy
yefengeeeeeeeeeee Mar 25, 2025
763585d
Merge branch 'kotyaralih:master' into master
yefengeeeeeeeeeee Apr 3, 2025
a8fb9e8
Merge branch 'kotyaralih:master' into master
yefengeeeeeeeeeee Apr 7, 2025
490516f
Thanks to @ArkQuark
yefengeeeeeeeeeee Apr 8, 2025
da824ca
Merge remote-tracking branch 'origin/master'
yefengeeeeeeeeeee Apr 8, 2025
fee80da
Merge branch 'master' into master
yefengeeeeeeeeeee Apr 12, 2025
7c8f32d
Thanks to @Sunch233
yefengeeeeeeeeeee Apr 12, 2025
2712adc
Fix auto respawn bug in MCPE 0.3.2 - 0.5.0
yefengeeeeeeeeeee Apr 12, 2025
c15eeef
feat: PacketPool
Sunch233 Apr 12, 2025
ce61a10
Fuck yefeng typo && Thanks to @Sunch233
yefengeeeeeeeeeee Apr 12, 2025
23de633
Merge branch 'yefengeeeeeeeeeee:master' into master
Sunch233 Apr 12, 2025
a5e19bb
fixed packets pid mess
Sunch233 Apr 12, 2025
2803ecf
MutiVersion: clean RakNetParser
Sunch233 Apr 12, 2025
492f441
Merge pull request #1 from ScaxeTeam/master
yefengeeeeeeeeeee Apr 12, 2025
f2e82b7
Merge branch 'kotyaralih:master' into master
yefengeeeeeeeeeee Apr 13, 2025
3e438cf
Merge branch 'master' into multiversion
yefengeeeeeeeeeee Apr 14, 2025
60b802b
Merge pull request #2 from yefengeeeeeeeeeee/multiversion
yefengeeeeeeeeeee Apr 14, 2025
755c12a
Fix @Sunch233 typo
yefengeeeeeeeeeee Apr 15, 2025
eccf3e7
Seems Fix TypeError
yefengeeeeeeeeeee Apr 17, 2025
edefb7f
PlaceBlockPacket impelement
yefengeeeeeeeeeee Apr 22, 2025
6b7563d
Seem Fix Type Error
yefengeeeeeeeeeee Apr 23, 2025
fd23ba0
Conver High ItemID to Old ItemId
yefengeeeeeeeeeee Apr 25, 2025
c8fc413
Thanks to @GameHeroBrine
yefengeeeeeeeeeee Apr 26, 2025
aad0031
Fix PlaceBlock Packet handle
yefengeeeeeeeeeee Apr 27, 2025
f6ca62f
typo
Sunch233 Apr 27, 2025
fc5c562
Use PHP-CS-fixer to standardize the code style
Sunch233 Apr 27, 2025
5e8e933
code style fix
Sunch233 Apr 27, 2025
27554d2
CodeStyle: use Github CI
Sunch233 Apr 27, 2025
0049ac9
better logic
Sunch233 Apr 27, 2025
1eceb70
Merge pull request #3 from ScaxeTeam/master
yefengeeeeeeeeeee Apr 27, 2025
a992bb6
ContainerAckPacket implement
yefengeeeeeeeeeee Apr 28, 2025
2b90f64
more canonical codestyle
Sunch233 Apr 28, 2025
682de0f
Merge pull request #60 from Sunch233/master
GameHerobrine Apr 28, 2025
c3a8eca
Merge branch 'master' into pr
yefengeeeeeeeeeee Apr 29, 2025
26cafca
Merge pull request #4 from yefengeeeeeeeeeee/pr
yefengeeeeeeeeeee Apr 29, 2025
1e85a65
cs fix
Sunch233 Apr 29, 2025
179baa4
Blame yefengeee moment
yefengeeeeeeeeeee Apr 29, 2025
93df0e3
Avoid Crash if server sending the packet which didnt exist in older v…
yefengeeeeeeeeeee Apr 30, 2025
9903b8b
Fixed Wrong ProtocolVersion && Some Packet Fixed
yefengeeeeeeeeeee May 3, 2025
a365acc
Thanks to @Gameherobrine
yefengeeeeeeeeeee May 3, 2025
e3f0ed0
Thanks to @ArkQuark
yefengeeeeeeeeeee May 3, 2025
de98590
SignUpdatePacket implement
yefengeeeeeeeeeee May 3, 2025
b003448
Merge branch 'master' into pr
yefengeeeeeeeeeee May 10, 2025
e847151
Merge pull request #6 from yefengeeeeeeeeeee/pr
yefengeeeeeeeeeee May 10, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
27 changes: 27 additions & 0 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
name: CI

on:
push:
pull_request:
workflow_dispatch:

jobs:
codestyle:
name: Code Style checks
runs-on: ubuntu-latest
strategy:
fail-fast: false

steps:
- uses: actions/checkout@v4

- name: Setup PHP and tools
uses: shivammathur/setup-php@2.31.1
with:
php-version: 8.0
tools: php-cs-fixer:3.60
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Run PHP-CS-Fixer
run: php-cs-fixer fix --dry-run --diff --ansi
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@ server.lock
*.txt
*.properties

# php-cs-fixer
/.php_cs.cache
/.php-cs-fixer.cache

############
## Windows
Expand Down
36 changes: 36 additions & 0 deletions .php-cs-fixer.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
<?php

$finder = PhpCsFixer\Finder::create()
->in(__DIR__ . '/src');

return (new PhpCsFixer\Config)
->setRules([
'array_indentation' => true,
'array_syntax' => [
'syntax' => 'short'
],
'binary_operator_spaces' => [
'default' => 'single_space'
],
'blank_line_after_namespace' => true,
'blank_line_after_opening_tag' => true,
'cast_spaces' => [
'space' => 'single'
],
'elseif' => true,
'indentation_type' => true,
'no_closing_tag' => true,
'no_empty_phpdoc' => true,
'no_extra_blank_lines' => true,
'no_superfluous_phpdoc_tags' => [
'allow_mixed' => true,
],
'no_trailing_whitespace' => true,
'no_trailing_whitespace_in_comment' => true,
'no_whitespace_in_blank_line' => true,
'unary_operator_spaces' => true
])
->setFinder($finder)
->setIndent("\t")
->setLineEnding("\n")
->setParallelConfig(PhpCsFixer\Runner\Parallel\ParallelConfigFactory::detect());
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

NostalgiaCore is a fork of Legacy PocketMine-MP 1.3.12, which fixes bugs of Legacy PocketMine-MP, and adds new content

Supported MCPE versions: 0.8.0, 0.8.1 (maybe 0.8.2)
Supported MCPE versions: 0.3.0 ~ 0.8.1 (maybe 0.8.2)

(Special thx to GullCraft Network and DartMiner43)

Expand Down
33 changes: 16 additions & 17 deletions src/API/AchievementAPI.php
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<?php

class AchievementAPI{

public static $achievements = [
/*"openInventory" => array(
"name" => "Taking Inventory",
Expand Down Expand Up @@ -79,20 +79,19 @@ class AchievementAPI{
"buildSword",
],
],

];

private $server;

function __construct(){
$this->server = ServerAPI::request();
}

/**
* Add an achievement
* @param string $achievementId
* @param string $achievementName
* @param array $requires
* @return boolean
*/
public static function addAchievement($achievementId, $achievementName, array $requires = []){
Expand All @@ -105,7 +104,7 @@ public static function addAchievement($achievementId, $achievementName, array $r
}
return false;
}

public static function grantAchievement(Player $player, $achievementId){
if(isset(self::$achievements[$achievementId]) and !self::hasAchievement($player, $achievementId)){
foreach(self::$achievements[$achievementId]["requires"] as $requerimentId){
Expand All @@ -123,19 +122,19 @@ public static function grantAchievement(Player $player, $achievementId){
}
return false;
}

public static function hasAchievement(Player $player, $achievementId){
if(!isset(self::$achievements[$achievementId]) or !isset($player->achievements)){
$player->achievements = [];
return false;
}

if(!isset($player->achievements[$achievementId]) or !$player->achievements[$achievementId]){
return false;
}
return true;
}

public static function broadcastAchievement(Player $player, $achievementId){
if(isset(self::$achievements[$achievementId])){
$result = ServerAPI::request()->api->dhandle("achievement.broadcast", ["player" => $player, "achievementId" => $achievementId]);
Expand All @@ -150,13 +149,13 @@ public static function broadcastAchievement(Player $player, $achievementId){
}
return false;
}

public static function removeAchievement(Player $player, $achievementId){
if(self::hasAchievement($player, $achievementId)){
$player->achievements[$achievementId] = false;
}
}

public function viewAchievements($cmd, $params, $issuer, $alias)
{
if(!isset($params[0])){
Expand All @@ -171,17 +170,17 @@ public function viewAchievements($cmd, $params, $issuer, $alias)
}else{
return false;
}

if(!$data){
return "Player is not found.";
}

if($data instanceof Config){
$achs = $data->get("achievements");
}else{
$achs = $data;
}

if(count($achs) <= 0){
return "Player {$params[0]} unlocked 0 achievements";
}
Expand All @@ -192,9 +191,9 @@ public function viewAchievements($cmd, $params, $issuer, $alias)
$output .= "{$info["name"]}, ";
}
}
return substr($output, 0, - 2);
return substr($output, 0, -2);
}

public function init(){
$this->server->api->console->register("ach", "<player>", [$this, "viewAchievements"]);
$this->server->api->console->alias("getplayerachievements", "ach");
Expand Down
2 changes: 1 addition & 1 deletion src/API/BanAPI.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ class BanAPI{
private $ops;
/** @var Config */
private $bannedIPs;

public $cmdWhitelist = [];//Command WhiteList

function __construct(){
Expand Down
60 changes: 42 additions & 18 deletions src/API/BlockAPI.php
Original file line number Diff line number Diff line change
Expand Up @@ -259,7 +259,7 @@ public function commandHandler($cmd, $args, $issuer, $alias){
$output .= "Usage: /setblock <x> <y> <z> <block[:damage]>";
break;
}

$level = $issuer->entity->level;
$block = self::fromString($args[3])->getBlock();
}
Expand Down Expand Up @@ -294,27 +294,27 @@ public function commandHandler($cmd, $args, $issuer, $alias){
break;
case "give":
$player = $this->server->api->player->get($args[0] ?? "");
if($player instanceof Player){

if($player instanceof Player){
$item = self::fromString($args[1] ?? "");
if(($player->gamemode & 0x01) === 0x01){
return "Player is in creative mode.";
}
if($item->getID() === 0){
return "You cannot give an air block to a player.";
}

if(!isset($args[2])){
$item->count = $item->getMaxStackSize();
}else{
$item->count = (int) $args[2];
}

$player->addItem($item->getID(), $item->getMetadata(), $item->count);
$output .= "Giving ".$item->count." of ".$item->getName()." (".$item->getID().":".$item->getMetadata().") to ".$player->username;
break;
}else{
$item = self::fromString($args[0] ?? "");
$item = self::fromString($args[0] ?? "");
if(!($issuer instanceof Player)){
return "You cant give an item to a non-player.";
}
Expand Down Expand Up @@ -412,7 +412,6 @@ public function playerBlockBreak(Player $player, Vector3 $vector){
return $this->cancelAction($target, $player, false);
}


if(is_array($drops) && ($player->gamemode & 0x01) === 0x00 and count($drops) > 0){
foreach($drops as $drop){
$this->server->api->entity->drop(new Position($target->x + 0.5, $target->y, $target->z + 0.5, $target->level), BlockAPI::getItem($drop[0] & 0xFFFF, $drop[1] & 0xFFFF, $drop[2]));
Expand Down Expand Up @@ -456,7 +455,7 @@ public function playerBlockAction(Player $player, Vector3 $vector, $face, $fx, $
return $this->cancelAction($block, $player);
}
}

StaticBlock::getBlock($target->getID())::interact($target->level, $target->x, $target->y, $target->z, $player);

if($target->isActivable === true){
Expand Down Expand Up @@ -501,14 +500,14 @@ public function playerBlockAction(Player $player, Vector3 $vector, $face, $fx, $
$hand->position($block);
//$face = -1;
}

if($hand->isSolid === true && ($hand->getID() != BED_BLOCK && $hand->getID() != CARPET)){
$aabb = $hand->getAABB($block->level, $block->x, $block->y, $block->z);
$playerbb = $player->entity->boundingBox;
if(($aabb->maxX > $playerbb->minX && $aabb->minX < $playerbb->maxX) && ($aabb->maxY > ($playerbb->minY+0.21) && $aabb->minY < $playerbb->maxY) && ($aabb->maxZ > $playerbb->minZ && $aabb->minZ < $playerbb->maxZ)){
if(($aabb->maxX > $playerbb->minX && $aabb->minX < $playerbb->maxX) && ($aabb->maxY > ($playerbb->minY + 0.21) && $aabb->minY < $playerbb->maxY) && ($aabb->maxZ > $playerbb->minZ && $aabb->minZ < $playerbb->maxZ)){
return $this->cancelAction($block, $player, false); //Entity in block
}

}

if($this->server->api->dhandle("player.block.place", ["player" => $player, "block" => $block, "target" => $target, "item" => $item]) === false){
Expand Down Expand Up @@ -537,14 +536,12 @@ public function blockUpdate(Position $pos, $type = BLOCK_UPDATE_NORMAL){
return false;
}
$level = $block::onUpdate($pos->level, $pos->x, $pos->y, $pos->z, $type);

return $level;
}



public function blockUpdateAround(Position $pos, $type = BLOCK_UPDATE_NORMAL, $delay = false){

if($type == BLOCK_UPDATE_NORMAL){
try{
throw new Exception("Deprecated: tried updating $pos using BLOCK_UPDATE_NORMAL.");
Expand All @@ -554,7 +551,7 @@ public function blockUpdateAround(Position $pos, $type = BLOCK_UPDATE_NORMAL, $d
}
return;
}

if($delay !== false){
$this->scheduleBlockUpdate($pos->getSide(0), $delay, $type);
$this->scheduleBlockUpdate($pos->getSide(1), $delay, $type);
Expand All @@ -576,7 +573,7 @@ public function scheduleBlockUpdateXYZ(Level $level, $x, $y, $z, $type = BLOCK_U
if($delay < 0){
return false;
}

$index = $x . "." . $y . "." . $z . "." . $level->getName() . "." . $type;
$delay = microtime(true) + $delay * 0.05;
if(!isset($this->scheduledUpdates[$index])){
Expand All @@ -586,7 +583,7 @@ public function scheduleBlockUpdateXYZ(Level $level, $x, $y, $z, $type = BLOCK_U
}
return false;
}

public function scheduleBlockUpdate(Position $pos, $delay, $type = BLOCK_UPDATE_SCHEDULED){
$type = (int) $type;
if($delay < 0){
Expand Down Expand Up @@ -644,4 +641,31 @@ public function blockUpdateTick(){
}
}
}

/**
* 方块/物品id转换,防止新版本影响旧版本视觉效果
*/
public static function convertHighItemIdsToOldItemIds(int $protocolId, int $itemId) : int{
if ($protocolId >= ProtocolInfo12::CURRENT_PROTOCOL_12) {
return $itemId;
}

$idMap = [ //default for protocol < 12
LIT_PUMPKIN => MELON_BLOCK, //block
PUMPKIN_SEEDS => MELON_SEEDS, //item
PUMPKIN_PIE => BREAD, //item
BEETROOT => BREAD, //item
BEETROOT_SEEDS => SEEDS, //item
];

if ($protocolId < ProtocolInfo9::CURRENT_PROTOCOL_9) {
$idMap += [
NETHERRACK => OBSIDIAN, //block
NETHER_BRICK => BRICK, //item
NETHER_QUARTZ => BRICK, //item
];
}

return $idMap[$itemId] ?? $itemId;
}
}
2 changes: 0 additions & 2 deletions src/API/ChatAPI.php
Original file line number Diff line number Diff line change
Expand Up @@ -107,8 +107,6 @@ public function broadcast($message){
/**
* @param mixed $owner Can be either Player object or string username. Boolean false for broadcast.
* @param string $text
* @param $whitelist
* @param $blacklist
*/
public function send($owner, $text, $whitelist = false, $blacklist = false){
$message = [
Expand Down
6 changes: 3 additions & 3 deletions src/API/ConsoleAPI.php
Original file line number Diff line number Diff line change
Expand Up @@ -24,20 +24,20 @@ public function init(){
$this->register("defaultgamemode", "<mode>", [$this, "defaultCommands"]);

$this->server->api->console->alias("tps", "status");

$this->cmdWhitelist("help");
$this->cmdWhitelist("status");
$this->cmdWhitelist("?");
}

/**
* Whitelists a CMD so everyone can issue it - Even non OPs.
* @param string $cmd Command to Whitelist
*/
public function cmdWhitelist($cmd){
$this->server->api->ban->cmdWhitelist[strtolower(trim($cmd))] = true;
}

public function register($cmd, $help, $callback){
if(!is_callable($callback)){
return false;
Expand Down
Loading
Loading