[API change] Make the Redstone Board API rely on energy cost and not probability
This commit is contained in:
parent
60d2135bb4
commit
99dd73e70f
5 changed files with 33 additions and 31 deletions
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
||||
}
|
||||
|
|
|
@ -12,7 +12,6 @@ import net.minecraft.item.ItemStack;
|
|||
|
||||
|
||||
public interface IRequestProvider {
|
||||
|
||||
/**
|
||||
* Return the total number of request slots available from this provider.
|
||||
*/
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue