package buildcraftAdditions.items.dust; import buildcraftAdditions.api.item.dust.IDust; import buildcraftAdditions.api.item.dust.IDustManager; import buildcraftAdditions.api.item.dust.IDustType; import buildcraftAdditions.config.ConfigurationHandler; import buildcraftAdditions.core.Logger; import net.minecraft.util.StringUtils; import java.util.Arrays; import java.util.Collections; import java.util.List; /** * Copyright (c) 2014-2015, AEnterprise * http://buildcraftadditions.wordpress.com/ * Buildcraft Additions is distributed under the terms of GNU GPL v3.0 * Please check the contents of the license located in * http://buildcraftadditions.wordpress.com/wiki/licensing-stuff/ */ public class DustManager implements IDustManager { private final IDust[] dusts = new IDust[Short.MAX_VALUE]; @Override public void addDust(int meta, String name, int colorMultiplier, IDustType dustType) { if (!ConfigurationHandler.shouldRegisterDusts && !(dustType instanceof DustTypes.DustAlwaysValid)) { Logger.info("Dust registering is disabled via config."); Logger.info("Was trying to add: Meta: " + meta + ", Name: " + name + ", Color multiplier: " + colorMultiplier + ", Dust type: " + (dustType != null ? dustType.getName() : "null")); return; } if (meta < 0 || meta >= dusts.length) { Logger.error("Tried to register an invalid dust! The meta '" + meta + "' is out of bounds! Skipping."); Logger.error("Was trying to add: Meta: " + meta + ", Name: " + name + ", Color multiplier: " + colorMultiplier + ", Dust type: " + (dustType != null ? dustType.getName() : "null")); return; } if (StringUtils.isNullOrEmpty(name) || Character.isLowerCase(name.charAt(0))) { Logger.error("Tried to register an invalid dust! The name '" + name + "' is not valid! Skipping."); Logger.error("Was trying to add: Meta: " + meta + ", Name: " + name + ", Color multiplier: " + colorMultiplier + ", Dust type: " + (dustType != null ? dustType.getName() : "null")); return; } if (dustType == null) { Logger.error("Tried to register an invalid dust! The dust type must not be null! Skipping."); Logger.error("Was trying to add: Meta: " + meta + ", Name: " + name + ", Color multiplier: " + colorMultiplier + ", Dust type: null"); return; } IDust dust = getDust(meta); if (dust != null) { Logger.error("A dust with the meta '" + meta + "' is already registered! Skipping."); Logger.error("Was trying to add: Meta: " + meta + ", Name: " + name + ", Color multiplier: " + colorMultiplier + ", Dust type: " + dustType.getName()); Logger.error("Found: Meta: " + dust.getMeta() + ", Name: " + dust.getName() + ", Color multiplier: " + dust.getColorMultiplier() + ", Dust type: " + (dust.getDustType() != null ? dust.getDustType().getName() : "null")); return; } dust = getDust(name); if (dust != null) { Logger.error("A dust with the name '" + name + "' is already registered! Skipping."); Logger.error("Was trying to add: Meta: " + meta + ", Name: " + name + ", Color multiplier: " + colorMultiplier + ", Dust type: " + dustType.getName()); Logger.error("Found: Meta: " + dust.getMeta() + ", Name: " + dust.getName() + ", Color multiplier: " + dust.getColorMultiplier() + ", Dust type: " + (dust.getDustType() != null ? dust.getDustType().getName() : "null")); return; } dust = new Dust(meta, name, colorMultiplier, dustType); if (dustType.isValid(meta, name, dust.getDustStack())) { dusts[meta] = dust; Logger.info("Successfully added a dust: Meta: " + meta + ", Name: " + name + ", Color multiplier: " + colorMultiplier + ", Dust type: " + dustType.getName()); } else { Logger.info("The dust with the name '" + name + "' will not be registered because it is invalid in this environment! Skipping."); Logger.info("Was trying to add: Meta: " + meta + ", Name: " + name + ", Color multiplier: " + colorMultiplier + ", Dust type: " + dustType.getName()); } } @Override public void removeDust(int meta) { IDust dust = getDust(meta); if (dust == null) { Logger.error("Tried to remove an invalid dust! A dust with the meta '" + meta + "' could not be found! Skipping."); return; } if (meta >= 0 && meta < dusts.length) { dusts[meta] = null; Logger.info("Successfully removed dust: Meta: " + dust.getMeta() + ", Name: " + dust.getName() + ", Color multiplier: " + dust.getColorMultiplier() + ", Dust type: " + (dust.getDustType() != null ? dust.getDustType().getName() : "null")); } } @Override public void removeDust(String name) { IDust dust = getDust(name); if (dust == null) { Logger.error("Tried to remove an invalid dust! A dust with the name '" + name + "' could not be found! Skipping."); return; } if (!StringUtils.isNullOrEmpty(name)) { for (int i = 0; i < dusts.length; i++) { if (dusts[i] != null && dusts[i].getName().equalsIgnoreCase(name)) { dusts[i] = null; Logger.info("Successfully removed dust: Meta: " + dust.getMeta() + ", Name: " + dust.getName() + ", Color multiplier: " + dust.getColorMultiplier() + ", Dust type: " + (dust.getDustType() != null ? dust.getDustType().getName() : "null")); return; } } } } @Override public IDust getDust(int meta) { if (meta >= 0 && meta < dusts.length) { return dusts[meta]; } return null; } @Override public IDust getDust(String name) { if (!StringUtils.isNullOrEmpty(name)) { for (IDust dust : dusts) { if (dust != null && dust.getName().equalsIgnoreCase(name)) { return dust; } } } return null; } @Override public List<? extends IDust> getDusts() { return Collections.unmodifiableList(Arrays.asList(dusts)); } }