mirror of
https://github.com/IntellectualSites/PlotSquared.git
synced 2024-11-26 07:06:44 +01:00
Use regex for block bucket, yay
This commit is contained in:
parent
8c1985f9c0
commit
7dcecf486d
@ -10,6 +10,8 @@ import lombok.Getter;
|
|||||||
import lombok.NonNull;
|
import lombok.NonNull;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Main Configuration Utility
|
* Main Configuration Utility
|
||||||
@ -61,6 +63,9 @@ public class Configuration {
|
|||||||
|
|
||||||
public static final SettingValue<BlockBucket> BLOCK_BUCKET =
|
public static final SettingValue<BlockBucket> BLOCK_BUCKET =
|
||||||
new SettingValue<BlockBucket>("BLOCK_BUCKET") {
|
new SettingValue<BlockBucket>("BLOCK_BUCKET") {
|
||||||
|
|
||||||
|
private Pattern pattern = Pattern.compile("((?<namespace>[A-Za-z_]+):)?(?<block>([A-Za-z_]+(\\[?[\\S\\s]+\\])?))(:(?<chance>[0-9]{1,3}))?");
|
||||||
|
|
||||||
@Override public BlockBucket parseString(final String string) {
|
@Override public BlockBucket parseString(final String string) {
|
||||||
if (string == null || string.isEmpty()) {
|
if (string == null || string.isEmpty()) {
|
||||||
return new BlockBucket();
|
return new BlockBucket();
|
||||||
@ -68,18 +73,12 @@ public class Configuration {
|
|||||||
final BlockBucket blockBucket = new BlockBucket();
|
final BlockBucket blockBucket = new BlockBucket();
|
||||||
final String[] parts = string.split(",(?![^\\(\\[]*[\\]\\)])");
|
final String[] parts = string.split(",(?![^\\(\\[]*[\\]\\)])");
|
||||||
for (final String part : parts) {
|
for (final String part : parts) {
|
||||||
String block = part;
|
Matcher matcher = pattern.matcher(part);
|
||||||
int chance = -1;
|
String namespace = matcher.group("namespace");
|
||||||
if (part.contains(":")) {
|
String block = matcher.group("block");
|
||||||
final String[] innerParts = part.split(":");
|
String chanceStr = matcher.group("chance");
|
||||||
String chanceStr = innerParts[innerParts.length - 1];
|
if (namespace == null) namespace = "minecraft";
|
||||||
if (innerParts.length > 1 && MathMan.isInteger(chanceStr)) {
|
int chance = chanceStr == null ? -1 : Integer.parseInt(chanceStr);
|
||||||
chance = Integer.parseInt(chanceStr);
|
|
||||||
block = StringMan.join(Arrays.copyOf(innerParts, innerParts.length - 1), ":");
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
block = part;
|
|
||||||
}
|
|
||||||
final StringComparison<BlockState>.ComparisonResult value =
|
final StringComparison<BlockState>.ComparisonResult value =
|
||||||
WorldUtil.IMP.getClosestBlock(block);
|
WorldUtil.IMP.getClosestBlock(block);
|
||||||
if (value == null) {
|
if (value == null) {
|
||||||
@ -101,20 +100,16 @@ public class Configuration {
|
|||||||
}
|
}
|
||||||
final String[] parts = string.split(",(?![^\\(\\[]*[\\]\\)])");
|
final String[] parts = string.split(",(?![^\\(\\[]*[\\]\\)])");
|
||||||
for (final String part : parts) {
|
for (final String part : parts) {
|
||||||
String block = part;
|
Matcher matcher = pattern.matcher(part);
|
||||||
if (part.contains(":")) {
|
String namespace = matcher.group("namespace");
|
||||||
final String[] innerParts = part.split(":");
|
String block = matcher.group("block");
|
||||||
String chanceStr = innerParts[innerParts.length - 1];
|
String chanceStr = matcher.group("chance");
|
||||||
if (innerParts.length > 1 && MathMan.isInteger(chanceStr)) {
|
if (namespace == null) namespace = "minecraft";
|
||||||
final int chance = Integer.parseInt(chanceStr);
|
int chance = chanceStr == null ? -1 : Integer.parseInt(chanceStr);
|
||||||
if (chance < 1 || chance > 100) {
|
|
||||||
|
if ((chance != -1 && (chance < 1 || chance > 100)) || block == null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
block = StringMan.join(Arrays.copyOf(innerParts, innerParts.length - 1), ":");
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
block = part;
|
|
||||||
}
|
|
||||||
StringComparison<BlockState>.ComparisonResult value =
|
StringComparison<BlockState>.ComparisonResult value =
|
||||||
WorldUtil.IMP.getClosestBlock(block);
|
WorldUtil.IMP.getClosestBlock(block);
|
||||||
if (value == null || value.match > 1) {
|
if (value == null || value.match > 1) {
|
||||||
|
Loading…
Reference in New Issue
Block a user