PHP code example of celestriode / constructure-target-selector
1. Go to this page and download the library: Download celestriode/constructure-target-selector library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
celestriode / constructure-target-selector example snippets
$parser = new TargetSelectorParser();
$parser->targeter = '@';
$parser->delimiterOpen = '[';
$parser->delimiterClose = ']';
$parser->nestedDelimiterOpen = '{';
$parser->nestedDelimiterClose = '}';
$parser->designator = '=';
$parser->separator = ',';
$parser->negator = '!';
SelectorTargets::get()->addValues('p', 'e', 'a', 'r', 's');
$parser->addOverride('nbt', function(TargetSelectorParser $parser, StringReader $reader, Parameter $parameter) {
return $parser::parseValueAsSnbt($parser, $reader, $parameter);
});
$parser->addOverride('type', function(TargetSelectorParser $parser, StringReader $reader, Parameter $parameter) {
return $parser::parseValueAsResourceLocation($parser, $reader, $parameter);
});
$constructure = new TargetSelectorConstructure($parser, new EventHandler());
$constructure->addGlobalAudit(TypesMatch::get()->addPredicate(StructureIsValue::get()));
$constructure->addGlobalAudit(Negatable::get()->addPredicate(StructureIsValue::get()));
$raw = "@e[tag=test]";
$input = $constructure->toStructure($raw);
$selector = Selector::root();
$selector->addAcceptedSelector(Selector::uuid());
$selector->addAcceptedSelector(
Selector::name()->addAudit(new StringLength(new MinMaxBounds(1, 16)))
);
$dynamicSelector = Selector::dynamic(SelectorTargets::get());
$dynamicSelector->getParameters()->addValue('tag', Selector::string()->negatable()->supportMultiple());
$dynamicSelector->getParameters()->addValue('scores', Selector::nested()
->addValue(null, Selector::string()->addAudit(Numeric::get()))
);
$selector->addAcceptedSelector($dynamicSelector);
$result = $constructure->validate($input, $selector);
$raw = "@e[tag=test]";
// Prepare the parser.
$parser = new TargetSelectorParser();
$parser->addOverride('nbt', TargetSelectorParser::forceSnbt());
$parser->addOverride('type', TargetSelectorParser::forceValueUntil(
$parser->separator,
$parser->delimiterClose,
$parser->nestedDelimiterClose
));
// Prepare the input.
$constructure = new TargetSelectorConstructure($parser, new EventHandler());
$constructure->addGlobalAudit(TypesMatch::get()->addPredicate(StructureIsValue::get()));
$constructure->addGlobalAudit(Negatable::get()->addPredicate(StructureIsValue::get()));
$input = $constructure->toStructure($raw);
// Prepare the validator.
SelectorTargets::get()->addValues('p', 'e', 'a', 'r', 's');
$expected = Selector::root(Selector::name());
$dynamicSelector = Selector::dynamic(SelectorTargets::get());
$dynamicSelector->getParameters()
->addValue('tag', Selector::string()->negatable())
->addValue('x', Selector::string())
->addValue('something', Selector::string()->addAudit(Numeric::get()));
$expected->addAcceptedSelector($dynamicSelector);
// Validate.
$result = $constructure->validate($input, $expected);
var_dump($result);
$a = 'Bob'; // true
$b = '1-2-3-4-5'; // false (UUID not allowed)
$c = '1g-2-3-4-5'; // false (UUID not allowed)
$d = '@a'; // true
$e = '@a[]'; // true
$f = '@a[tag=test]'; // true
$g = '@a[tag=!test]'; // true
$h = '@a[blargh=test]'; // false ("blargh" is not a valid key)
$i = '@a[x=!test]'; // false ("x" is not negatable)
$j = '@a[tag=test,something=4]'; // true
$k = '@a[tag=test,something=test]'; // false ("something" must be numeric)