Move static upgrade helpers in a class with state

This commit is contained in:
Raoul Van den Berge
2016-07-19 04:53:44 +02:00
parent 55cd5c2c47
commit e9745c2b61
11 changed files with 96 additions and 113 deletions

View File

@@ -21,7 +21,6 @@ import org.apache.commons.lang3.ArrayUtils;
import refinedstorage.api.autocrafting.ICraftingPattern;
import refinedstorage.api.network.INetworkMaster;
import refinedstorage.api.storage.CompareFlags;
import refinedstorage.item.ItemUpgrade;
import java.util.HashSet;
import java.util.List;
@@ -176,48 +175,6 @@ public final class RefinedStorageUtils {
return false;
}
public static int getSpeed(IItemHandler handler) {
return getSpeed(handler, 9, 2);
}
public static int getSpeed(IItemHandler handler, int speed, int speedIncrease) {
for (int i = 0; i < handler.getSlots(); ++i) {
if (handler.getStackInSlot(i) != null && handler.getStackInSlot(i).getMetadata() == ItemUpgrade.TYPE_SPEED) {
speed -= speedIncrease;
}
}
return speed;
}
public static boolean hasUpgrade(IItemHandler handler, int type) {
return getUpgradeCount(handler, type) > 0;
}
public static int getUpgradeCount(IItemHandler handler, int type) {
int upgrades = 0;
for (int i = 0; i < handler.getSlots(); ++i) {
if (handler.getStackInSlot(i) != null && handler.getStackInSlot(i).getMetadata() == type) {
upgrades++;
}
}
return upgrades;
}
public static int getUpgradeEnergyUsage(IItemHandler handler) {
int usage = 0;
for (int i = 0; i < handler.getSlots(); ++i) {
if (handler.getStackInSlot(i) != null) {
usage += ItemUpgrade.getEnergyUsage(handler.getStackInSlot(i).getMetadata());
}
}
return usage;
}
public static void writeBooleanArray(NBTTagCompound tag, String name, boolean[] array) {
int[] intArray = new int[array.length];

View File

@@ -6,7 +6,8 @@ import net.minecraftforge.items.ItemStackHandler;
public class BasicItemHandler extends ItemStackHandler {
private TileEntity tile;
private IItemValidator[] validators;
protected IItemValidator[] validators;
public BasicItemHandler(int size, TileEntity tile, IItemValidator... validators) {
super(size);

View File

@@ -0,0 +1,57 @@
package refinedstorage.inventory;
import net.minecraft.tileentity.TileEntity;
import refinedstorage.RefinedStorageItems;
import refinedstorage.item.ItemUpgrade;
public class UpgradeItemHandler extends BasicItemHandler {
public UpgradeItemHandler(int size, TileEntity tile, int... supportedUpgrades) {
super(size, tile, new IItemValidator[supportedUpgrades.length]);
for (int i = 0; i < supportedUpgrades.length; ++i) {
this.validators[i] = new BasicItemValidator(RefinedStorageItems.UPGRADE, supportedUpgrades[i]);
}
}
public int getSpeed() {
return getSpeed(9, 2);
}
public int getSpeed(int speed, int speedIncrease) {
for (int i = 0; i < getSlots(); ++i) {
if (getStackInSlot(i) != null && getStackInSlot(i).getItemDamage() == ItemUpgrade.TYPE_SPEED) {
speed -= speedIncrease;
}
}
return speed;
}
public boolean hasUpgrade(int type) {
return getUpgradeCount(type) > 0;
}
public int getUpgradeCount(int type) {
int upgrades = 0;
for (int i = 0; i < getSlots(); ++i) {
if (getStackInSlot(i) != null && getStackInSlot(i).getItemDamage() == type) {
upgrades++;
}
}
return upgrades;
}
public int getEnergyUsage() {
int usage = 0;
for (int i = 0; i < getSlots(); ++i) {
if (getStackInSlot(i) != null) {
usage += ItemUpgrade.getEnergyUsage(getStackInSlot(i).getItemDamage());
}
}
return usage;
}
}

View File

@@ -13,13 +13,12 @@ import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.items.CapabilityItemHandler;
import net.minecraftforge.items.IItemHandler;
import refinedstorage.RefinedStorage;
import refinedstorage.RefinedStorageItems;
import refinedstorage.RefinedStorageUtils;
import refinedstorage.apiimpl.autocrafting.CraftingTaskScheduler;
import refinedstorage.container.ContainerConstructor;
import refinedstorage.container.slot.SlotSpecimen;
import refinedstorage.inventory.BasicItemHandler;
import refinedstorage.inventory.BasicItemValidator;
import refinedstorage.inventory.UpgradeItemHandler;
import refinedstorage.item.ItemUpgrade;
import refinedstorage.tile.config.ICompareConfig;
@@ -36,12 +35,7 @@ public class TileConstructor extends TileNode implements ICompareConfig {
block = SlotSpecimen.getBlockState(worldObj, pos.offset(getDirection()), getStackInSlot(0));
}
};
private BasicItemHandler upgrades = new BasicItemHandler(
4,
this,
new BasicItemValidator(RefinedStorageItems.UPGRADE, ItemUpgrade.TYPE_SPEED),
new BasicItemValidator(RefinedStorageItems.UPGRADE, ItemUpgrade.TYPE_CRAFTING)
);
private UpgradeItemHandler upgrades = new UpgradeItemHandler(4, this, ItemUpgrade.TYPE_SPEED, ItemUpgrade.TYPE_CRAFTING);
private int compare = 0;
private IBlockState block;
@@ -50,12 +44,12 @@ public class TileConstructor extends TileNode implements ICompareConfig {
@Override
public int getEnergyUsage() {
return RefinedStorage.INSTANCE.constructorUsage + RefinedStorageUtils.getUpgradeEnergyUsage(upgrades);
return RefinedStorage.INSTANCE.constructorUsage + upgrades.getEnergyUsage();
}
@Override
public void updateNode() {
if (block != null && ticks % RefinedStorageUtils.getSpeed(upgrades, BASE_SPEED, 4) == 0) {
if (block != null && ticks % upgrades.getSpeed(BASE_SPEED, 4) == 0) {
BlockPos front = pos.offset(getDirection());
if (worldObj.isAirBlock(front) && block.getBlock().canPlaceBlockAt(worldObj, front)) {
@@ -67,7 +61,7 @@ public class TileConstructor extends TileNode implements ICompareConfig {
// From ItemBlock.onItemUse
SoundType blockSound = block.getBlock().getSoundType();
worldObj.playSound(null, front, blockSound.getPlaceSound(), SoundCategory.BLOCKS, (blockSound.getVolume() + 1.0F) / 2.0F, blockSound.getPitch() * 0.8F);
} else if (RefinedStorageUtils.hasUpgrade(upgrades, ItemUpgrade.TYPE_CRAFTING)) {
} else if (upgrades.hasUpgrade(ItemUpgrade.TYPE_CRAFTING)) {
ItemStack craft = filter.getStackInSlot(0);
if (scheduler.canSchedule(compare, craft)) {

View File

@@ -16,8 +16,8 @@ import refinedstorage.api.autocrafting.ICraftingTask;
import refinedstorage.api.network.INetworkMaster;
import refinedstorage.container.ContainerCrafter;
import refinedstorage.inventory.BasicItemHandler;
import refinedstorage.inventory.BasicItemValidator;
import refinedstorage.inventory.IItemValidator;
import refinedstorage.inventory.UpgradeItemHandler;
import refinedstorage.item.ItemPattern;
import refinedstorage.item.ItemUpgrade;
@@ -38,11 +38,11 @@ public class TileCrafter extends TileNode implements ICraftingPatternContainer {
}
};
private BasicItemHandler upgrades = new BasicItemHandler(4, this, new BasicItemValidator(RefinedStorageItems.UPGRADE, ItemUpgrade.TYPE_SPEED));
private UpgradeItemHandler upgrades = new UpgradeItemHandler(4, this, ItemUpgrade.TYPE_SPEED);
@Override
public int getEnergyUsage() {
int usage = RefinedStorage.INSTANCE.crafterUsage + RefinedStorageUtils.getUpgradeEnergyUsage(upgrades);
int usage = RefinedStorage.INSTANCE.crafterUsage + upgrades.getEnergyUsage();
for (int i = 0; i < patterns.getSlots(); ++i) {
if (patterns.getStackInSlot(i) != null) {
@@ -95,7 +95,7 @@ public class TileCrafter extends TileNode implements ICraftingPatternContainer {
@Override
public int getSpeed() {
return 20 - (RefinedStorageUtils.getUpgradeCount(upgrades, ItemUpgrade.TYPE_SPEED) * 4);
return 20 - (upgrades.getUpgradeCount(ItemUpgrade.TYPE_SPEED) * 4);
}
@Override

View File

@@ -13,11 +13,10 @@ import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.items.CapabilityItemHandler;
import net.minecraftforge.items.IItemHandler;
import refinedstorage.RefinedStorage;
import refinedstorage.RefinedStorageItems;
import refinedstorage.RefinedStorageUtils;
import refinedstorage.container.ContainerDestructor;
import refinedstorage.inventory.BasicItemHandler;
import refinedstorage.inventory.BasicItemValidator;
import refinedstorage.inventory.UpgradeItemHandler;
import refinedstorage.item.ItemUpgrade;
import refinedstorage.tile.config.ICompareConfig;
import refinedstorage.tile.config.IModeConfig;
@@ -33,23 +32,19 @@ public class TileDestructor extends TileNode implements ICompareConfig, IModeCon
private static final int BASE_SPEED = 20;
private BasicItemHandler filters = new BasicItemHandler(9, this);
private BasicItemHandler upgrades = new BasicItemHandler(
4,
this,
new BasicItemValidator(RefinedStorageItems.UPGRADE, ItemUpgrade.TYPE_SPEED)
);
private UpgradeItemHandler upgrades = new UpgradeItemHandler(4, this, ItemUpgrade.TYPE_SPEED);
private int compare = 0;
private int mode = ModeConstants.WHITELIST;
@Override
public int getEnergyUsage() {
return RefinedStorage.INSTANCE.destructorUsage + RefinedStorageUtils.getUpgradeEnergyUsage(upgrades);
return RefinedStorage.INSTANCE.destructorUsage + upgrades.getEnergyUsage();
}
@Override
public void updateNode() {
if (ticks % RefinedStorageUtils.getSpeed(upgrades, BASE_SPEED, 4) == 0) {
if (ticks % upgrades.getSpeed(BASE_SPEED, 4) == 0) {
BlockPos front = pos.offset(getDirection());
IBlockState frontBlockState = worldObj.getBlockState(front);

View File

@@ -10,12 +10,11 @@ import net.minecraftforge.items.CapabilityItemHandler;
import net.minecraftforge.items.IItemHandler;
import net.minecraftforge.items.ItemHandlerHelper;
import refinedstorage.RefinedStorage;
import refinedstorage.RefinedStorageItems;
import refinedstorage.RefinedStorageUtils;
import refinedstorage.apiimpl.autocrafting.CraftingTaskScheduler;
import refinedstorage.container.ContainerExporter;
import refinedstorage.inventory.BasicItemHandler;
import refinedstorage.inventory.BasicItemValidator;
import refinedstorage.inventory.UpgradeItemHandler;
import refinedstorage.item.ItemUpgrade;
import refinedstorage.tile.config.ICompareConfig;
@@ -23,13 +22,7 @@ public class TileExporter extends TileNode implements ICompareConfig {
private static final String NBT_COMPARE = "Compare";
private BasicItemHandler filters = new BasicItemHandler(9, this);
private BasicItemHandler upgrades = new BasicItemHandler(
4,
this,
new BasicItemValidator(RefinedStorageItems.UPGRADE, ItemUpgrade.TYPE_SPEED),
new BasicItemValidator(RefinedStorageItems.UPGRADE, ItemUpgrade.TYPE_CRAFTING),
new BasicItemValidator(RefinedStorageItems.UPGRADE, ItemUpgrade.TYPE_STACK)
);
private UpgradeItemHandler upgrades = new UpgradeItemHandler(4, this, ItemUpgrade.TYPE_SPEED, ItemUpgrade.TYPE_CRAFTING, ItemUpgrade.TYPE_STACK);
private int compare = 0;
@@ -37,16 +30,16 @@ public class TileExporter extends TileNode implements ICompareConfig {
@Override
public int getEnergyUsage() {
return RefinedStorage.INSTANCE.exporterUsage + RefinedStorageUtils.getUpgradeEnergyUsage(upgrades);
return RefinedStorage.INSTANCE.exporterUsage + upgrades.getEnergyUsage();
}
@Override
public void updateNode() {
IItemHandler handler = RefinedStorageUtils.getItemHandler(getFacingTile(), getDirection().getOpposite());
int size = RefinedStorageUtils.hasUpgrade(upgrades, ItemUpgrade.TYPE_STACK) ? 64 : 1;
int size = upgrades.hasUpgrade(ItemUpgrade.TYPE_STACK) ? 64 : 1;
if (handler != null && ticks % RefinedStorageUtils.getSpeed(upgrades) == 0) {
if (handler != null && ticks % upgrades.getSpeed() == 0) {
for (int i = 0; i < filters.getSlots(); ++i) {
ItemStack slot = filters.getStackInSlot(i);
@@ -61,7 +54,7 @@ public class TileExporter extends TileNode implements ICompareConfig {
if (remainder != null) {
network.insertItem(remainder, remainder.stackSize, false);
}
} else if (RefinedStorageUtils.hasUpgrade(upgrades, ItemUpgrade.TYPE_CRAFTING)) {
} else if (upgrades.hasUpgrade(ItemUpgrade.TYPE_CRAFTING)) {
if (scheduler.canSchedule(compare, slot)) {
scheduler.schedule(network, compare, slot);
}

View File

@@ -9,11 +9,10 @@ import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.items.CapabilityItemHandler;
import net.minecraftforge.items.IItemHandler;
import refinedstorage.RefinedStorage;
import refinedstorage.RefinedStorageItems;
import refinedstorage.RefinedStorageUtils;
import refinedstorage.container.ContainerImporter;
import refinedstorage.inventory.BasicItemHandler;
import refinedstorage.inventory.BasicItemValidator;
import refinedstorage.inventory.UpgradeItemHandler;
import refinedstorage.item.ItemUpgrade;
import refinedstorage.tile.config.ICompareConfig;
import refinedstorage.tile.config.IModeConfig;
@@ -25,12 +24,7 @@ public class TileImporter extends TileNode implements ICompareConfig, IModeConfi
private static final String NBT_MODE = "Mode";
private BasicItemHandler filters = new BasicItemHandler(9, this);
private BasicItemHandler upgrades = new BasicItemHandler(
4,
this,
new BasicItemValidator(RefinedStorageItems.UPGRADE, ItemUpgrade.TYPE_SPEED),
new BasicItemValidator(RefinedStorageItems.UPGRADE, ItemUpgrade.TYPE_STACK)
);
private UpgradeItemHandler upgrades = new UpgradeItemHandler(4, this, ItemUpgrade.TYPE_SPEED, ItemUpgrade.TYPE_STACK);
private int compare = 0;
private int mode = ModeConstants.WHITELIST;
@@ -39,7 +33,7 @@ public class TileImporter extends TileNode implements ICompareConfig, IModeConfi
@Override
public int getEnergyUsage() {
return RefinedStorage.INSTANCE.importerUsage + RefinedStorageUtils.getUpgradeEnergyUsage(upgrades);
return RefinedStorage.INSTANCE.importerUsage + upgrades.getEnergyUsage();
}
@Override
@@ -59,8 +53,8 @@ public class TileImporter extends TileNode implements ICompareConfig, IModeConfi
if (stack == null || !ModeFilter.respectsMode(filters, this, compare, stack)) {
currentSlot++;
} else if (ticks % RefinedStorageUtils.getSpeed(upgrades) == 0) {
int quantity = RefinedStorageUtils.hasUpgrade(upgrades, ItemUpgrade.TYPE_STACK) ? 64 : 1;
} else if (ticks % upgrades.getSpeed() == 0) {
int quantity = upgrades.hasUpgrade(ItemUpgrade.TYPE_STACK) ? 64 : 1;
ItemStack result = handler.extractItem(currentSlot, quantity, true);

View File

@@ -10,11 +10,10 @@ import net.minecraftforge.items.CapabilityItemHandler;
import net.minecraftforge.items.IItemHandler;
import net.minecraftforge.items.wrapper.CombinedInvWrapper;
import refinedstorage.RefinedStorage;
import refinedstorage.RefinedStorageItems;
import refinedstorage.RefinedStorageUtils;
import refinedstorage.container.ContainerInterface;
import refinedstorage.inventory.BasicItemHandler;
import refinedstorage.inventory.BasicItemValidator;
import refinedstorage.inventory.UpgradeItemHandler;
import refinedstorage.item.ItemUpgrade;
import refinedstorage.tile.config.ICompareConfig;
@@ -24,12 +23,7 @@ public class TileInterface extends TileNode implements ICompareConfig {
private BasicItemHandler importItems = new BasicItemHandler(9, this);
private BasicItemHandler exportSpecimenItems = new BasicItemHandler(9, this);
private BasicItemHandler exportItems = new BasicItemHandler(9, this);
private BasicItemHandler upgrades = new BasicItemHandler(
4,
this,
new BasicItemValidator(RefinedStorageItems.UPGRADE, ItemUpgrade.TYPE_SPEED),
new BasicItemValidator(RefinedStorageItems.UPGRADE, ItemUpgrade.TYPE_STACK)
);
private UpgradeItemHandler upgrades = new UpgradeItemHandler(4, this, ItemUpgrade.TYPE_SPEED, ItemUpgrade.TYPE_STACK);
private int compare = 0;
@@ -37,7 +31,7 @@ public class TileInterface extends TileNode implements ICompareConfig {
@Override
public int getEnergyUsage() {
return RefinedStorage.INSTANCE.interfaceUsage + RefinedStorageUtils.getUpgradeEnergyUsage(upgrades);
return RefinedStorage.INSTANCE.interfaceUsage + upgrades.getEnergyUsage();
}
@Override
@@ -50,8 +44,8 @@ public class TileInterface extends TileNode implements ICompareConfig {
if (slot == null) {
currentSlot++;
} else if (ticks % RefinedStorageUtils.getSpeed(upgrades) == 0) {
int size = Math.min(slot.stackSize, RefinedStorageUtils.hasUpgrade(upgrades, ItemUpgrade.TYPE_STACK) ? 64 : 1);
} else if (ticks % upgrades.getSpeed() == 0) {
int size = Math.min(slot.stackSize, upgrades.hasUpgrade(ItemUpgrade.TYPE_STACK) ? 64 : 1);
ItemStack remainder = network.insertItem(slot, size, false);

View File

@@ -9,15 +9,14 @@ import net.minecraftforge.items.CapabilityItemHandler;
import net.minecraftforge.items.IItemHandler;
import net.minecraftforge.items.wrapper.CombinedInvWrapper;
import refinedstorage.RefinedStorage;
import refinedstorage.RefinedStorageItems;
import refinedstorage.RefinedStorageUtils;
import refinedstorage.api.RefinedStorageAPI;
import refinedstorage.api.network.INetworkMaster;
import refinedstorage.api.solderer.ISoldererRecipe;
import refinedstorage.container.ContainerSolderer;
import refinedstorage.inventory.BasicItemHandler;
import refinedstorage.inventory.BasicItemValidator;
import refinedstorage.inventory.SoldererItemHandler;
import refinedstorage.inventory.UpgradeItemHandler;
import refinedstorage.item.ItemUpgrade;
public class TileSolderer extends TileNode {
@@ -25,7 +24,7 @@ public class TileSolderer extends TileNode {
private static final String NBT_PROGRESS = "Progress";
private BasicItemHandler items = new BasicItemHandler(4, this);
private BasicItemHandler upgrades = new BasicItemHandler(4, this, new BasicItemValidator(RefinedStorageItems.UPGRADE, ItemUpgrade.TYPE_SPEED));
private UpgradeItemHandler upgrades = new UpgradeItemHandler(4, this, ItemUpgrade.TYPE_SPEED);
private SoldererItemHandler[] itemsFacade = new SoldererItemHandler[EnumFacing.values().length];
private ISoldererRecipe recipe;
@@ -36,7 +35,7 @@ public class TileSolderer extends TileNode {
@Override
public int getEnergyUsage() {
return RefinedStorage.INSTANCE.soldererUsage + RefinedStorageUtils.getUpgradeEnergyUsage(upgrades);
return RefinedStorage.INSTANCE.soldererUsage + upgrades.getEnergyUsage();
}
@Override
@@ -61,7 +60,7 @@ public class TileSolderer extends TileNode {
markDirty();
}
} else if (working) {
progress += 1 + RefinedStorageUtils.getUpgradeCount(upgrades, ItemUpgrade.TYPE_SPEED);
progress += 1 + upgrades.getUpgradeCount(ItemUpgrade.TYPE_SPEED);
if (progress >= recipe.getDuration()) {
if (items.getStackInSlot(3) != null) {

View File

@@ -8,20 +8,19 @@ import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.items.CapabilityItemHandler;
import net.minecraftforge.items.IItemHandler;
import refinedstorage.RefinedStorage;
import refinedstorage.RefinedStorageItems;
import refinedstorage.RefinedStorageUtils;
import refinedstorage.api.network.IWirelessTransmitter;
import refinedstorage.container.ContainerWirelessTransmitter;
import refinedstorage.inventory.BasicItemHandler;
import refinedstorage.inventory.BasicItemValidator;
import refinedstorage.inventory.UpgradeItemHandler;
import refinedstorage.item.ItemUpgrade;
public class TileWirelessTransmitter extends TileNode implements IWirelessTransmitter {
private BasicItemHandler upgrades = new BasicItemHandler(4, this, new BasicItemValidator(RefinedStorageItems.UPGRADE, ItemUpgrade.TYPE_RANGE));
private UpgradeItemHandler upgrades = new UpgradeItemHandler(4, this, ItemUpgrade.TYPE_RANGE);
@Override
public int getEnergyUsage() {
return RefinedStorage.INSTANCE.wirelessTransmitterUsage + RefinedStorageUtils.getUpgradeEnergyUsage(upgrades);
return RefinedStorage.INSTANCE.wirelessTransmitterUsage + upgrades.getEnergyUsage();
}
@Override
@@ -46,7 +45,7 @@ public class TileWirelessTransmitter extends TileNode implements IWirelessTransm
@Override
public int getRange() {
return RefinedStorage.INSTANCE.wirelessTransmitterBaseRange + (RefinedStorageUtils.getUpgradeCount(upgrades, ItemUpgrade.TYPE_RANGE) * RefinedStorage.INSTANCE.wirelessTransmitterRangePerUpgrade);
return RefinedStorage.INSTANCE.wirelessTransmitterBaseRange + (upgrades.getUpgradeCount(ItemUpgrade.TYPE_RANGE) * RefinedStorage.INSTANCE.wirelessTransmitterRangePerUpgrade);
}
@Override