mirror of
https://github.com/NoCheatPlus/NoCheatPlus.git
synced 2025-01-15 12:01:51 +01:00
Rename + extend config support for reading Material.
This commit is contained in:
parent
c93edcbbe9
commit
c6dbd7330b
@ -111,7 +111,7 @@ public class InventoryConfig extends ACheckConfig {
|
||||
fastConsumeCheck = data.getBoolean(ConfPaths.INVENTORY_FASTCONSUME_CHECK);
|
||||
fastConsumeDuration = (long) (1000.0 * data.getDouble(ConfPaths.INVENTORY_FASTCONSUME_DURATION));
|
||||
fastConsumeWhitelist = data.getBoolean(ConfPaths.INVENTORY_FASTCONSUME_WHITELIST);
|
||||
data.readMaterialFromList(ConfPaths.INVENTORY_FASTCONSUME_ITEMS, fastConsumeItems);
|
||||
data.readMaterialIdsFromList(ConfPaths.INVENTORY_FASTCONSUME_ITEMS, fastConsumeItems);
|
||||
fastConsumeActions = data.getOptimizedActionList(ConfPaths.INVENTORY_FASTCONSUME_ACTIONS, Permissions.INVENTORY_FASTCONSUME);
|
||||
|
||||
instantBowCheck = data.getBoolean(ConfPaths.INVENTORY_INSTANTBOW_CHECK);
|
||||
|
@ -12,12 +12,17 @@ import fr.neatmonster.nocheatplus.logging.LogUtil;
|
||||
|
||||
public class RawConfigFile extends YamlConfiguration{
|
||||
|
||||
private static String prepareMatchMaterial(String content) {
|
||||
return content.replace(' ', '_').replace('-', '_').replace('.', '_');
|
||||
}
|
||||
|
||||
/**
|
||||
* Attempt to get an int id from a string.<br>
|
||||
* Will return out of range numbers, attempts to parse materials.
|
||||
* @param content
|
||||
* @return
|
||||
*/
|
||||
@SuppressWarnings("deprecation")
|
||||
public static Integer parseTypeId(String content) {
|
||||
content = content.trim().toUpperCase();
|
||||
try{
|
||||
@ -25,13 +30,34 @@ public class RawConfigFile extends YamlConfiguration{
|
||||
}
|
||||
catch(NumberFormatException e){}
|
||||
try{
|
||||
Material mat = Material.matchMaterial(content.replace(' ', '_').replace('-', '_').replace('.', '_'));
|
||||
Material mat = Material.matchMaterial(prepareMatchMaterial(content));
|
||||
if (mat != null) return mat.getId();
|
||||
}
|
||||
catch (Exception e) {}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Attempt to get a Material from a string.<br>
|
||||
* Will attempt to match the name but also type ids.
|
||||
* @param content
|
||||
* @return
|
||||
*/
|
||||
@SuppressWarnings("deprecation")
|
||||
public static Material parseMaterial(String content) {
|
||||
content = content.trim().toUpperCase();
|
||||
try{
|
||||
Integer id = Integer.parseInt(content);
|
||||
return Material.getMaterial(id);
|
||||
}
|
||||
catch(NumberFormatException e){}
|
||||
try{
|
||||
return Material.matchMaterial(prepareMatchMaterial(content));
|
||||
}
|
||||
catch (Exception e) {}
|
||||
return null;
|
||||
}
|
||||
|
||||
////////////////
|
||||
// Not static.
|
||||
////////////////
|
||||
@ -119,7 +145,7 @@ public class RawConfigFile extends YamlConfiguration{
|
||||
* @param path
|
||||
* @param target Collection to fill ids into.
|
||||
*/
|
||||
public void readMaterialFromList(final String path, final Collection<Integer> target) {
|
||||
public void readMaterialIdsFromList(final String path, final Collection<Integer> target) {
|
||||
final List<String> content = getStringList(path);
|
||||
if (content == null || content.isEmpty()) return;
|
||||
for (final String entry : content){
|
||||
@ -133,6 +159,25 @@ public class RawConfigFile extends YamlConfiguration{
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Outputs warnings to console.
|
||||
* @param path
|
||||
* @param target Collection to fill materials into.
|
||||
*/
|
||||
public void readMaterialFromList(final String path, final Collection<Material> target) {
|
||||
final List<String> content = getStringList(path);
|
||||
if (content == null || content.isEmpty()) return;
|
||||
for (final String entry : content){
|
||||
final Material mat = parseMaterial(entry);
|
||||
if (mat == null){
|
||||
LogUtil.logWarning("[NoCheatPlus] Bad material entry (" + path +"): " + entry);
|
||||
}
|
||||
else{
|
||||
target.add(mat);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.bukkit.configuration.file.YamlConfiguration#saveToString()
|
||||
*/
|
||||
|
@ -0,0 +1,40 @@
|
||||
package fr.neatmonster.nocheatplus.test;
|
||||
|
||||
import static org.junit.Assert.fail;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.junit.Test;
|
||||
|
||||
import fr.neatmonster.nocheatplus.config.RawConfigFile;
|
||||
|
||||
public class TestConfig {
|
||||
|
||||
private void testReadMaterial(String input, Material expectedMat) {
|
||||
Material mat = RawConfigFile.parseMaterial(input);
|
||||
if (expectedMat != mat) {
|
||||
fail("Expected " + expectedMat + " for input '" + input + "', got instead: " + mat);
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@Test
|
||||
public void testReadMaterial() {
|
||||
// Some really needed parts first.
|
||||
testReadMaterial("water lily", Material.WATER_LILY);
|
||||
testReadMaterial("water-lily", Material.WATER_LILY);
|
||||
testReadMaterial("watEr_lily", Material.WATER_LILY);
|
||||
|
||||
testReadMaterial("flint and steel", Material.FLINT_AND_STEEL);
|
||||
testReadMaterial("259", Material.FLINT_AND_STEEL);
|
||||
|
||||
// Generic test.
|
||||
for (final Material mat : Material.values()) {
|
||||
if (mat.name().equalsIgnoreCase("LOCKED_CHEST")) {
|
||||
continue;
|
||||
}
|
||||
testReadMaterial(mat.name(), mat);
|
||||
testReadMaterial(Integer.toString(mat.getId()), mat);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user