PHP library to parse minecraft server motd
This library can be installed by issuing the following command:
composer require dev-lancer/minecraft-motd-parser
Lang |
---|
EN |
PL |
To parse a text-based MOTD using custom formatting and colors:
$formatCollection = \DevLancer\MinecraftMotdParser\Collection\FormatCollection::generate();
$colorCollection = \DevLancer\MinecraftMotdParser\Collection\ColorCollection::generate(true); //When set to true, colors from BE are added
$parser = new \DevLancer\MinecraftMotdParser\Parser\TextParser($formatCollection, $colorCollection, '&');
$motd = "A &l&fMine&4craft &rServer";
$motdItemCollection = $parser->parse($motd, new \DevLancer\MinecraftMotdParser\Collection\MotdItemCollection());
To parse a structured array-based MOTD:
$formatCollection = \DevLancer\MinecraftMotdParser\Collection\FormatCollection::generate();
$colorCollection = \DevLancer\MinecraftMotdParser\Collection\ColorCollection::generate();
$parser = new \DevLancer\MinecraftMotdParser\Parser\ArrayParser($formatCollection, $colorCollection);
$motd = [
[ "text" => "A "],
[
"bold" => true,
"extra" => [
[
"color" => "white",
"text" => "Mine"
],
[
"color" => "dark_red",
"text" => "craft "
],
]
],
[
"text" => "Server"
]
];
$motdItemCollection = $parser->parse($motd, new \DevLancer\MinecraftMotdParser\Collection\MotdItemCollection());
The mergeSimilarItem() method in the MotdItemCollection class merges adjacent MotdItem objects with the same formatting and color. This optimization helps to reduce redundancy in the formatting and color codes, making the MOTD more concise.
$motd = "A &l&fMine&f&lcraft &rServer";
$motdItemCollection = $parser->parse($motd, new \DevLancer\MinecraftMotdParser\Collection\MotdItemCollection());
//Output before
[
['text': "A "],
['bold': true, 'color': "white", 'text': "Mine"],
['bold': true, 'color': "white", 'text': "craft "],
['reset': true, 'text': "Server"],
]
$motdItemCollection->mergeSimilarItem();
//Output after
[
['text': "A "],
['bold': true, 'color': "white", 'text': "Minecraft "],
['reset': true, 'text': "Server"],
]
Example of creating a MotdItemCollection:
$parser = new \DevLancer\MinecraftMotdParser\Parser\TextParser();
$motd = "A §l§fMine§4craft §rServer";
$motdItemCollection = $parser->parse($motd, new \DevLancer\MinecraftMotdParser\Collection\MotdItemCollection());
To generate HTML from a parsed MOTD:
$generator = new \DevLancer\MinecraftMotdParser\Generator\HtmlGenerator();
// Generate HTML from the MOTD item collection
echo $generator->generate($motdItemCollection);
The output will be:
A <span style="font-weight: bold; color: #FFFFFF;">Mine</span>
<span style="font-weight: bold; color: #AA0000;">craft </span> Server
To generate raw text from a parsed MOTD:
$generator = new \DevLancer\MinecraftMotdParser\Generator\RawGenerator("§");
// Generate raw text from the MOTD item collection
echo $generator->generate($motdItemCollection);
//output: A §f§lMine§4craft §rServer
To generate plain text from a parsed MOTD:
$generator = new \DevLancer\MinecraftMotdParser\Generator\TextGenerator();
// Generate plain text from the MOTD item collection
echo $generator->generate($motdItemCollection);
//output: A Minecraft Server
Example of creating a custom bold formatter:
class CustomBoldFormatter implements FormatterInterface
{
public function getKey(): string
{
return 'l';
}
public function getName(): string
{
return 'bold';
}
public function getFormat(): string
{
return '<b class="CustomBoldFormatter">%s</b>';
}
}
To use the custom formatter:
// Create a new format collection
$formatCollection = \DevLancer\MinecraftMotdParser\Collection\FormatCollection::generate();
// and override the default formatter for bold
$formatCollection->add(new CustomBoldFormatter());
// Create a new MOTD item
$motdItem = new \DevLancer\MinecraftMotdParser\MotdItem();
$motdItem->setBold(true);
$motdItem->setText("Hello World");
// Create a new MOTD item collection and add the MOTD item
$motdItemCollection = new \DevLancer\MinecraftMotdParser\Collection\MotdItemCollection();
$motdItemCollection->add($motdItem);
// Generate HTML using the custom formatter
$generator = new \DevLancer\MinecraftMotdParser\Generator\HtmlGenerator($formatCollection);
echo $generator->generate($motdItemCollection);
The output will be:
<b class="CustomBoldFormatter">Hello World</b>
This library is licensed under the MIT License.