定制 aternos/hawk 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

aternos/hawk

Composer 安装命令:

composer require aternos/hawk

包简介

PHP library to get, replace and delete blocks/entities out of Minecraft region files

README 文档

README

About

Hawk is a PHP library to get and/or replace blocks and get and/or delete entities in Minecraft region files. This allows the user to replace blocks or delete entities that will crash the server when loaded.

Currently, following versions are supported:

1.12+ for entities
1.16+ for blocks

Installation

composer require aternos/hawk

Usage

Class File

How to get a file from disk:

$file = new File("your/region/file");

How to use setContent() to set up a file stream and getContent() to get the content out of the stream:

$file = new File();
$file->setContent(file_get_contents("your/region/file"));
$file->setFileName("your/file/name");
"...do stuff here..."
$contentToBeWritten = $file->getContent();

Class Hawk

Setups:

Setup for blocks and block entities in any supported version:

// New block coordinates
$blockPos = new McCoordinates3D(1, 2, 3);

// Path to your region file and calculating the filename from the coordinates
$inputPath = "/your/world/region/directory";
$blockFiles[] = new File($inputPath . "/" . Region::getRegionFileNameFromBlock($blockPos));

// Instantiating Hawk only with blockFiles
$hawk = new Hawk(blockFiles: $blockFiles);

Setup for entities prior 1.17:

// New entity coordinates
$entityPos = new McCoordinatesFloat(1.2, 2.3, 3.4);

// Path to your region file and calculating the filename from the coordinates
$inputPath = "/your/world/region/directory";
$entitiesFiles[] = new File($inputPath . "/" . Region::getRegionFileNameFromBlock(McCoordinatesFloat::get3DCoordinates($entityPos)));

// Instantiating Hawk only with blockFiles because entities used to be in the same file
$hawk = new Hawk(blockFiles: $entitiesFiles);

Setup for entities starting from 1.17:

// Path to your entities directory and calculating the filename from the coordinates
$inputPath = "/your/world/entities/directory";
$entitiesFiles[] = new File($inputPath . "/" . Region::getRegionFileNameFromBlock(McCoordinatesFloat::get3DCoordinates($entityPos)));

$hawk = new Hawk(entitiesFiles: $entitiesFiles);

How to read a block:

$block = $hawk->getBlock($blockPos);

How to replace a block at x = 1, y = 2, z = 3 with wool(default is minecraft:stone):

$hawk->replaceBlock($blockPos, "minecraft:wool");
$hawk->save();

Get all entities in a specific chunk:

$entities = $hawk->getAllEntitiesFromChunk(McCoordinatesFloat::get3DCoordinates($entityPos));

How to get all entities next to float coordinates (there could be more than just one):

$entities = $hawk->getEntities($entityName,$entityPos);

How to delete an entity:

$entities = $hawk->getEntities($entityName,$entityPos);
$hawk->deleteEntity($entities[0]);
$hawk->save();

Get all block entities in a specific chunk:

$entities = $hawk->getAllBlockEntitiesFromChunk(McCoordinatesFloat::get3DCoordinates($entityPos));

How to get all block entities next to float coordinates (there could be more than just one):

$entities = $hawk->getBlockEntities($entityName,$entityPos);

How to delete a block entity:

$entities = $hawk->getBlockEntities($entityName,$entityPos);
$hawk->deleteBlockEntity($entities[0]);
$hawk->save();

For more information see these examples: getBlock.php, replaceBlock.php, getEntity.php, getAllEntitiesInChunk.php, deleteEntity.php.

Methods

Name Return type Description
loadBlockRegions(File[] $files) void Load extra "block"("world/region") regions from $files into Hawk
loadEntitiesRegions(File[] $files) void Load extra "entities"("world/entities") regions from $files into Hawk
getBlockRegionFromBlock(McCoordinates3D $coordinates) Region Get block region from block at $coordinates
getEntitiesRegionFromBlock(McCoordinates3D $coordinates) Region Get entities region from block at $coordinates (see McCoordinatesFloat::get3DCoordinates for entity coords)
getBlock(McCoordinates3D $coordinates) DataBlock Get block at $coordinates
replaceBlock(McCoordinates3D $coordinates, string $blockName = "minecraft:stone") void Replace block at $coordinates with block $blockName
getEntities(string $name, McCoordinatesFloat $coordinates) Entity[] Gets one or multiple entities at $coordinates
getAllEntitiesFromChunk(McCoordinates3D $blockCoordinates) Entity[] Gets all entities in chunk based on $coordinates
deleteEntity(Entity $entity) void Deletes an entity object
getEntities(string $name, McCoordinatesFloat $coordinates) Entity[] Gets one or multiple entities at $coordinates
getAllEntitiesFromChunk(McCoordinates3D $blockCoordinates) Entity[] Gets all entities in chunk based on $coordinates
deleteEntity(Entity $entity) void Deletes an entity object
save() void Save changes to file

Class Region

A region object represents a Minecraft region file. The main tasks of a region object is to read/decompress and write/compress chunks from/to its region file. Additionally, it provides static functions to calculate region coordinates and its file name.

Methods

Name Return type Description
static getRegionFileNameFromBlock(McCoordinates3D $coordinates) string Get region file name out of block coordinates
static getRegionCoordinatesFromFile(AbstractFile $file) McCoordinates2D Get region coordinates from file name
static getRegionCoordinatesFromBlockCoordinates(McCoordinates3D $coordinates) McCoordinates2D Get region coordinates from block coordinates
static getRegionCoordinatesFromChunkCoordinates(McCoordinates2D $coordinates) McCoordinates2D Get region coordinates from chunk coordinates

Class Chunk

A chunk object represents a Minecraft chunk in Mojangs chunk format. The main task of a chunk object is to replace the sections tag of the NBT structure, compress the new chunk data and provide it to its region. Additionally, it provides a static function to calculate chunk coordinates.

Methods

Name Return type Description
static getChunkCoordinates(McCoordinates3D $coordinates) McCoordinates2D Get chunk coordinates from block coordinates

Class Section

A section object represents a single section tag.

Methods

Name Return type Description
static getSectionCoordinates(McCoordinates3D $coordinates) McCoordinates3D Get section coordinates from block coordinates
static getBlockCoordinates(McCoordinates3D $coordinates) McCoordinates3D Get block coordinates relative to its section

aternos/hawk 适用场景与选型建议

aternos/hawk 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 3.02k 次下载、GitHub Stars 达 9, 最近一次更新时间为 2022 年 05 月 31 日, 在 PHP 生态内属于活跃度较高的组件。

我们在过去多个企业项目中使用过 aternos/hawk 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 aternos/hawk 我们能提供哪些服务?
定制开发 / 二次开发

基于 aternos/hawk 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 3.02k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 9
  • 点击次数: 18
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 9
  • Watchers: 1
  • Forks: 2
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2022-05-31