use of buildcraft.api.statements.IStatement in project BuildCraft by BuildCraft.
the class DockingStationPipe method getRequest.
@Override
public ItemStack getRequest(int slot) {
int facing = (slot & 0x70) >> 4;
int action = (slot & 0xc) >> 2;
int param = slot & 0x3;
if (facing >= 6) {
return null;
}
EnumFacing side = EnumFacing.getFront(facing);
IGate gate = getPipe().getPipe().getGate(side);
if (gate == null) {
return null;
}
List<IStatement> actions = gate.getActions();
if (actions.size() <= action) {
return null;
}
if (actions.get(action) != BuildCraftRobotics.actionStationRequestItems) {
return null;
}
List<StatementSlot> activeActions = gate.getActiveActions();
StatementSlot slotStmt = null;
for (StatementSlot stmt : activeActions) {
if (stmt.statement == actions.get(action)) {
slotStmt = stmt;
break;
}
}
if (slotStmt == null) {
return null;
}
if (slotStmt.parameters.length <= param) {
return null;
}
if (slotStmt.parameters[param] == null) {
return null;
}
return slotStmt.parameters[param].getItemStack();
}
use of buildcraft.api.statements.IStatement in project BuildCraft by BuildCraft.
the class TriggerWrapper method getPossible.
@Override
public TriggerWrapper[] getPossible() {
IStatement[] possible = delegate.getPossible();
boolean andSides = sourcePart != EnumPipePart.CENTER;
TriggerWrapper[] real = new TriggerWrapper[possible.length + (andSides ? 5 : 0)];
for (int i = 0; i < possible.length; i++) {
real[i] = wrap(possible[i], sourcePart.face);
}
if (andSides) {
EnumPipePart part = sourcePart;
for (int j = 0; j < 5; j++) {
int i = j + possible.length;
part = part.next();
real[i] = wrap(delegate, part.face);
}
}
return real;
}
use of buildcraft.api.statements.IStatement in project BuildCraft by BuildCraft.
the class GuidePageContents method loadMainGui.
public void loadMainGui() {
TypeOrder order = GuiGuide.SORTING_TYPES[gui.sortingOrderIndex];
contents.clear();
quickSearcher = new SuffixArray<>();
lastSearchText = "";
Set<Item> itemsAdded = new HashSet<>();
final String underline = TextFormatting.UNDERLINE.toString();
for (PageEntry<?> entry : GuideManager.INSTANCE.getAllEntries()) {
GuidePageFactory entryFactory = GuideManager.INSTANCE.getFactoryFor(entry);
String[] ordered = entry.typeTags.getOrdered(order);
String header = underline + LocaleUtil.localize(ordered[0]);
String subHeader = underline + LocaleUtil.localize(ordered[1]);
String translatedTitle = LocaleUtil.localize(entry.title);
ISimpleDrawable icon = entry.createDrawable();
PageLine line = new PageLine(icon, icon, 2, translatedTitle, true);
GuideText text = new GuideText(gui, line);
SubHeader pageHolder = contents.getOrAddSubHeader(header, subHeader);
if (entryFactory == null) {
if (entry.value instanceof ItemStackValueFilter) {
ItemStack stack = ((ItemStackValueFilter) entry.value).stack.baseStack;
itemsAdded.add(stack.getItem());
PageLinkGenerated pageLink = pageHolder.addKnownPage(text, stack);
if (pageLink != null) {
quickSearcher.add(pageLink, pageLink.joinedTooltip.toLowerCase(Locale.ROOT));
}
}
} else {
if (entry.value instanceof ItemStackValueFilter) {
ItemStack stack = ((ItemStackValueFilter) entry.value).stack.baseStack;
itemsAdded.add(stack.getItem());
}
PageLinkNormal pageLink = pageHolder.addNormalPage(text, entryFactory);
quickSearcher.add(pageLink, pageLink.getName().toLowerCase(Locale.ROOT));
}
}
String localizedGroup = underline + "\u0379" + LocaleUtil.localize("buildcraft.guide.contents.all_group");
String localizedItems = underline + LocaleUtil.localize("buildcraft.guide.contents.item_stacks");
Title allTitle = contents.getOrAddTitle(localizedGroup);
SubHeader allHolder = allTitle.getOrAddSubHeader(localizedItems);
for (Item item : ForgeRegistries.ITEMS) {
if (itemsAdded.contains(item)) {
continue;
}
NonNullList<ItemStack> stacks = NonNullList.create();
item.getSubItems(CreativeTabs.SEARCH, stacks);
for (int i = 0; i < stacks.size(); i++) {
ItemStack stack = stacks.get(i);
PageLinkGenerated pageLink = allHolder.addUnknownStack(stack);
if (pageLink != null) {
quickSearcher.add(pageLink, pageLink.joinedTooltip.toLowerCase(Locale.ROOT));
}
if (i > 50) {
// most likely the same item
break;
}
}
}
String localizedTriggers = underline + LocaleUtil.localize("buildcraft.guide.contents.triggers");
String localizedActions = underline + LocaleUtil.localize("buildcraft.guide.contents.actions");
SubHeader triggers = allTitle.getOrAddSubHeader(localizedTriggers);
SubHeader actions = allTitle.getOrAddSubHeader(localizedActions);
Set<IStatement> added = new HashSet<>();
for (IStatement statement : new TreeMap<>(StatementManager.statements).values()) {
if (!added.add(statement)) {
continue;
}
if (GuideManager.INSTANCE.getEntryFor(statement) != null) {
continue;
}
ISimpleDrawable icon = (x, y) -> GuiElementStatementSource.drawGuiSlot(statement, x, y);
List<String> tooltip = statement.getTooltip();
String title = tooltip.isEmpty() ? statement.getUniqueTag() : tooltip.get(0);
GuideText text = new GuideText(gui, new PageLine(icon, icon, 2, title, true));
final PageLinkNormal pageLink;
if (statement instanceof ITrigger) {
pageLink = triggers.addUnknownPage(text, g -> new GuidePage(gui, ImmutableList.of(), title));
} else if (statement instanceof IAction) {
pageLink = actions.addUnknownPage(text, g -> new GuidePage(gui, ImmutableList.of(), title));
} else {
pageLink = null;
}
if (pageLink != null) {
String joinedTooltip = tooltip.stream().collect(Collectors.joining(" ", "", ""));
String searchSr = statement.getUniqueTag() + " " + joinedTooltip;
quickSearcher.add(pageLink, searchSr.toLowerCase(Locale.ROOT));
}
}
quickSearcher.generate();
contents.sortAll();
}
use of buildcraft.api.statements.IStatement in project BuildCraft by BuildCraft.
the class ActionWrapper method getPossible.
@Override
public ActionWrapper[] getPossible() {
IStatement[] possible = delegate.getPossible();
boolean andSides = sourcePart != EnumPipePart.CENTER;
List<ActionWrapper> list = new ArrayList<>(possible.length + 5);
for (int i = 0; i < possible.length; i++) {
list.add(wrap(possible[i], sourcePart.face));
}
if (andSides) {
EnumPipePart part = sourcePart;
for (int j = 0; j < 5; j++) {
int i = j + possible.length;
part = part.next();
ActionWrapper action = wrap(delegate, part.face);
if (true) {
// TODO: Check the gui container to see if this is a valid action!
list.add(action);
}
}
}
return list.toArray(new ActionWrapper[0]);
}
use of buildcraft.api.statements.IStatement in project BuildCraft by BuildCraft.
the class SchematicPipe method rotateGateLeft.
private void rotateGateLeft(NBTTagCompound gateNBT) {
for (int i = 0; i < Gate.MAX_STATEMENTS; ++i) {
if (gateNBT.hasKey("trigger[" + i + "]")) {
IStatement t = StatementManager.statements.get(gateNBT.getString("trigger[" + i + "]"));
t = t.rotateLeft();
gateNBT.setString("trigger[" + i + "]", t.getUniqueTag());
}
if (gateNBT.hasKey("action[" + i + "]")) {
IStatement a = StatementManager.statements.get(gateNBT.getString("action[" + i + "]"));
a = a.rotateLeft();
gateNBT.setString("action[" + i + "]", a.getUniqueTag());
}
for (int j = 0; j < Gate.MAX_PARAMETERS; ++j) {
if (gateNBT.hasKey("triggerParameters[" + i + "][" + j + "]")) {
NBTTagCompound cpt = gateNBT.getCompoundTag("triggerParameters[" + i + "][" + j + "]");
IStatementParameter parameter = StatementManager.createParameter(cpt.getString("kind"));
parameter.readFromNBT(cpt);
parameter = parameter.rotateLeft();
parameter.writeToNBT(cpt);
gateNBT.setTag("triggerParameters[" + i + "][" + j + "]", cpt);
}
if (gateNBT.hasKey("actionParameters[" + i + "][" + j + "]")) {
NBTTagCompound cpt = gateNBT.getCompoundTag("actionParameters[" + i + "][" + j + "]");
IStatementParameter parameter = StatementManager.createParameter(cpt.getString("kind"));
parameter.readFromNBT(cpt);
parameter = parameter.rotateLeft();
parameter.writeToNBT(cpt);
gateNBT.setTag("actionParameters[" + i + "][" + j + "]", cpt);
}
}
}
if (gateNBT.hasKey("direction")) {
EnumFacing face = EnumFacing.VALUES[gateNBT.getInteger("direction")];
if (face.getAxis() != Axis.Y) {
face = face.rotateY();
}
gateNBT.setInteger("direction", face.ordinal());
}
}
Aggregations