[API change] Make the Redstone Board API rely on energy cost and not probability

This commit is contained in:
asiekierka 2015-03-30 21:45:07 +02:00
parent 60d2135bb4
commit 99dd73e70f
5 changed files with 33 additions and 31 deletions

View file

@ -17,10 +17,20 @@ public abstract class RedstoneBoardRegistry {
public static RedstoneBoardRegistry instance;
public abstract void registerBoardClass(RedstoneBoardNBT<?> redstoneBoardNBT, float probability);
/**
* Register a redstone board type.
* @param redstoneBoardNBT The RedstoneBoardNBT instance containing the board information.
* @param energyCost RF price of the board, in RF.
*/
public abstract void registerBoardType(RedstoneBoardNBT<?> redstoneBoardNBT, int energyCost);
@Deprecated
public abstract void createRandomBoard(NBTTagCompound nbt);
/**
* Register a redstone board type. Deprecated, use registerBoardType now.
* @param redstoneBoardNBT The RedstoneBoardNBT instance containing the board information.
* @param probability Since 6.4.x, this is used to calculate the RF price of the board in the Programming Table by doing (160000 / probability).
*/
public abstract void registerBoardClass(RedstoneBoardNBT<?> redstoneBoardNBT, float probability);
public abstract RedstoneBoardNBT getRedstoneBoard(NBTTagCompound nbt);
@ -29,4 +39,6 @@ public abstract class RedstoneBoardRegistry {
public abstract void registerIcons(IIconRegister par1IconRegister);
public abstract Collection<RedstoneBoardNBT<?>> getAllBoardNBTs();
public abstract int getEnergyCost(RedstoneBoardNBT<?> board);
}

View file

@ -40,10 +40,18 @@ public class AIRobot {
}
/**
* This gets called when a delegate AI ends work naturally.
* @param ai The delegate AI which ended work.
*/
public void delegateAIEnded(AIRobot ai) {
}
/**
* This gets called when a delegate AI is forcibly aborted.
* @param ai The delegate AI which was aborted.
*/
public void delegateAIAborted(AIRobot ai) {
}

View file

@ -12,7 +12,6 @@ import net.minecraft.item.ItemStack;
public interface IRequestProvider {
/**
* Return the total number of request slots available from this provider.
*/

View file

@ -44,9 +44,9 @@ public class BoardProgrammingRecipe implements IProgrammingRecipe {
@Override
public int getEnergyCost(ItemStack option) {
// TODO: Replace probability with proper energy cost? (7.0.x?)
ImplRedstoneBoardRegistry impl = (ImplRedstoneBoardRegistry) RedstoneBoardRegistry.instance;
return Math.round((20.0F / impl.getProbability(option.getTagCompound().getString("id"))) * 8000);
return RedstoneBoardRegistry.instance.getEnergyCost(
RedstoneBoardRegistry.instance.getRedstoneBoard(option.getTagCompound().getString("id"))
);
}
@Override

View file

@ -22,46 +22,29 @@ import buildcraft.api.boards.RedstoneBoardNBT;
import buildcraft.api.boards.RedstoneBoardRegistry;
public class ImplRedstoneBoardRegistry extends RedstoneBoardRegistry {
private static class BoardFactory {
public RedstoneBoardNBT<?> boardNBT;
public float probability;
public int energyCost;
}
private float totalProbability;
private HashMap<String, BoardFactory> boards = new HashMap<String, BoardFactory>();
private Random rand = new Random();
@Override
public void registerBoardClass(RedstoneBoardNBT<?> redstoneBoardNBT, float probability) {
public void registerBoardType(RedstoneBoardNBT<?> redstoneBoardNBT, int energyCost) {
if (BuildCraftRobotics.blacklistedRobots.contains(redstoneBoardNBT.getID())) {
return;
}
BoardFactory factory = new BoardFactory();
factory.boardNBT = redstoneBoardNBT;
factory.probability = probability;
factory.energyCost = energyCost;
totalProbability += probability;
boards.put(redstoneBoardNBT.getID(), factory);
}
@Override
public void createRandomBoard(NBTTagCompound nbt) {
float value = rand.nextFloat() * totalProbability;
float accumulatedSearch = 0;
for (BoardFactory f : boards.values()) {
accumulatedSearch += f.probability;
if (accumulatedSearch > value) {
f.boardNBT.createBoard(nbt);
return;
}
}
public void registerBoardClass(RedstoneBoardNBT<?> redstoneBoardNBT, float probability) {
this.registerBoardType(redstoneBoardNBT, Math.round(160000 / probability));
}
@Override
@ -98,8 +81,8 @@ public class ImplRedstoneBoardRegistry extends RedstoneBoardRegistry {
return result;
}
// TODO: Publicize this in the abstract class (6.5.0)
public float getProbability(String id) {
return boards.get(id) != null ? boards.get(id).probability : 0;
@Override
public int getEnergyCost(RedstoneBoardNBT<?> board) {
return boards.get(board.getID()).energyCost;
}
}