Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
import com.simibubi.create.content.logistics.packagerLink.RequestPromiseQueue;
import com.simibubi.create.content.logistics.stockTicker.PackageOrder;
import com.simibubi.create.content.logistics.stockTicker.PackageOrderWithCrafts;
import com.simibubi.create.content.logistics.stockTicker.PackageOrderWithCrafts.CraftingEntry;
import com.simibubi.create.content.schematics.requirement.ItemRequirement;
import com.simibubi.create.foundation.advancement.AllAdvancements;
import com.simibubi.create.foundation.blockEntity.SmartBlockEntity;
Expand Down Expand Up @@ -109,6 +110,7 @@ public class FactoryPanelBehaviour extends FilteringBehaviour implements MenuPro
public boolean forceClearPromises;
public UUID network;
public boolean active;
public int craft_time;

public boolean redstonePowered;

Expand Down Expand Up @@ -451,14 +453,14 @@ private void tickRequests() {
InventorySummary summary = LogisticsManager.getSummaryOfNetwork(network, true);

for (ItemStackConnections connections : entry.getValue().values()) {
if (connections.totalAmount == 0 || connections.item.isEmpty() || summary.getCountOf(connections.item) < connections.totalAmount) {
if (connections.totalAmount == 0 || connections.item.isEmpty() || summary.getCountOf(connections.item) < connections.totalAmount*craft_time) {
for (FactoryPanelConnection connection : connections)
sendEffect(connection.from, false);
failed = true;
continue;
}

BigItemStack stack = new BigItemStack(connections.item, connections.totalAmount);
BigItemStack stack = new BigItemStack(connections.item, connections.totalAmount*craft_time);
toRequest.put(network, stack);
for (FactoryPanelConnection connection : connections)
sendEffect(connection.from, true);
Expand All @@ -475,9 +477,9 @@ private void tickRequests() {

// Panel may enforce item arrangement
if (!activeCraftingArrangement.isEmpty())
craftingContext = PackageOrderWithCrafts.singleRecipe(activeCraftingArrangement.stream()
.map(stack -> new BigItemStack(stack.copyWithCount(1)))
.toList());
craftingContext = new PackageOrderWithCrafts(PackageOrder.empty(), List.of(new CraftingEntry(new PackageOrder(activeCraftingArrangement.stream()
.map(stack -> new BigItemStack(stack.copyWithCount(1)))
.toList()), craft_time)));

// Collect request distributions
for (Entry<UUID, Collection<BigItemStack>> entry : asMap.entrySet()) {
Expand All @@ -501,7 +503,7 @@ private void tickRequests() {
// Keep the output promise
RequestPromiseQueue promises = Create.LOGISTICS.getQueuedPromises(network);
if (promises != null)
promises.add(new RequestPromise(new BigItemStack(getFilter(), recipeOutput)));
promises.add(new RequestPromise(new BigItemStack(getFilter(), recipeOutput*craft_time)));

panelBE.advancements.awardPlayer(AllAdvancements.FACTORY_GAUGE);
}
Expand Down Expand Up @@ -835,6 +837,7 @@ public void write(CompoundTag nbt, HolderLookup.Provider registries, boolean cli
panelTag.putInt("LastLevel", lastReportedLevelInStorage);
panelTag.putInt("LastPromised", lastReportedPromises);
panelTag.putInt("LastUnloadedLinks", lastReportedUnloadedLinks);
panelTag.putInt("CraftTime",craft_time);
panelTag.putBoolean("Satisfied", satisfied);
panelTag.putBoolean("PromisedSatisfied", promisedSatisfied);
panelTag.putBoolean("Waiting", waitingForNetwork);
Expand Down Expand Up @@ -867,6 +870,7 @@ public void read(CompoundTag nbt, HolderLookup.Provider registries, boolean clie
count = panelTag.getInt("FilterAmount");
upTo = panelTag.getBoolean("UpTo");
timer = panelTag.getInt("Timer");
craft_time = panelTag.getInt("CraftTime");
lastReportedLevelInStorage = panelTag.getInt("LastLevel");
lastReportedPromises = panelTag.getInt("LastPromised");
lastReportedUnloadedLinks = panelTag.getInt("LastUnloadedLinks");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ public class FactoryPanelConfigurationPacket extends BlockEntityConfigurationPac
ByteBufCodecs.BOOL, packet -> packet.clearPromises,
ByteBufCodecs.BOOL, packet -> packet.reset,
ByteBufCodecs.BOOL, packet -> packet.redstoneReset,
ByteBufCodecs.INT, packet -> packet.craft_time,
FactoryPanelConfigurationPacket::new
);

Expand All @@ -43,11 +44,12 @@ public class FactoryPanelConfigurationPacket extends BlockEntityConfigurationPac
private final boolean clearPromises;
private final boolean reset;
private final boolean redstoneReset;
private final int craft_time;

public FactoryPanelConfigurationPacket(FactoryPanelPosition position, String address,
Map<FactoryPanelPosition, Integer> inputAmounts, List<ItemStack> craftingArrangement, int outputAmount,
int promiseClearingInterval, @Nullable FactoryPanelPosition removeConnection, boolean clearPromises,
boolean reset, boolean sendRedstoneReset) {
boolean reset, boolean sendRedstoneReset, int craft_time) {
super(position.pos());
this.position = position;
this.address = address;
Expand All @@ -59,6 +61,7 @@ public FactoryPanelConfigurationPacket(FactoryPanelPosition position, String add
this.clearPromises = clearPromises;
this.reset = reset;
this.redstoneReset = sendRedstoneReset;
this.craft_time = craft_time;
}

@Override
Expand All @@ -76,6 +79,9 @@ protected void applySettings(ServerPlayer player, FactoryPanelBlockEntity be) {
behaviour.recipeOutput = reset ? 1 : outputAmount;
behaviour.promiseClearingInterval = reset ? -1 : promiseClearingInterval;
behaviour.activeCraftingArrangement = reset ? List.of() : craftingArrangement;
behaviour.craft_time = craft_time;



if (reset) {
behaviour.forceClearPromises = true;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ public class FactoryPanelScreen extends AbstractSimiScreen {
private BigItemStack outputConfig;
private List<BigItemStack> inputConfig;
private List<FactoryPanelConnection> connections;
private int craft_time;

private CraftingRecipe availableCraftingRecipe;
private boolean craftingActive;
Expand All @@ -89,6 +90,7 @@ private void updateConfigs() {
return b == null ? new BigItemStack(ItemStack.EMPTY, 0) : new BigItemStack(b.getFilter(), c.amount);
})
.toList();
craft_time = behaviour.craft_time;

searchForCraftingRecipe();

Expand Down Expand Up @@ -218,6 +220,7 @@ protected void init() {
activateCraftingButton.withCallback(() -> {
craftingActive = !craftingActive;
init();
craft_time=1;
if (craftingActive) {
outputConfig.count = availableCraftingRecipe.getResultItem(minecraft.level.registryAccess())
.getCount();
Expand Down Expand Up @@ -262,7 +265,7 @@ protected void renderWindow(GuiGraphics graphics, int mouseX, int mouseY, float
int slot = 0;
if (craftingActive) {
for (BigItemStack itemStack : craftingIngredients)
renderInputItem(graphics, slot++, itemStack, mouseX, mouseY);
renderInputItem(graphics, slot++, itemStack, mouseX, mouseY, craft_time);
} else {
for (BigItemStack itemStack : inputConfig)
renderInputItem(graphics, slot++, itemStack, mouseX, mouseY);
Expand Down Expand Up @@ -291,7 +294,7 @@ protected void renderWindow(GuiGraphics graphics, int mouseX, int mouseY, float
int outputX = x + 160;
int outputY = y + 48;
graphics.renderItem(outputConfig.stack, outputX, outputY);
graphics.renderItemDecorations(font, behaviour.getFilter(), outputX, outputY, outputConfig.count + "");
graphics.renderItemDecorations(font, behaviour.getFilter(), outputX, outputY, outputConfig.count*craft_time + "");

if (mouseX >= outputX - 1 && mouseX < outputX - 1 + 18 && mouseY >= outputY - 1
&& mouseY < outputY - 1 + 18) {
Expand Down Expand Up @@ -423,13 +426,13 @@ protected void renderWindow(GuiGraphics graphics, int mouseX, int mouseY, float

//

private void renderInputItem(GuiGraphics graphics, int slot, BigItemStack itemStack, int mouseX, int mouseY) {
private void renderInputItem(GuiGraphics graphics, int slot, BigItemStack itemStack, int mouseX, int mouseY, int override_number) {
int inputX = guiLeft + (restocker ? 88 : 68 + (slot % 3 * 20));
int inputY = guiTop + (restocker ? 12 : 28) + (slot / 3 * 20);

graphics.renderItem(itemStack.stack, inputX, inputY);
if (!craftingActive && !restocker && !itemStack.stack.isEmpty())
graphics.renderItemDecorations(font, itemStack.stack, inputX, inputY, itemStack.count + "");
if ((!craftingActive || override_number != 0) && !restocker && !itemStack.stack.isEmpty())
graphics.renderItemDecorations(font, itemStack.stack, inputX, inputY, (override_number==0?itemStack.count:override_number)+"");

if (mouseX < inputX - 2 || mouseX >= inputX - 2 + 20 || mouseY < inputY - 2 || mouseY >= inputY - 2 + 20)
return;
Expand Down Expand Up @@ -493,6 +496,10 @@ private void renderInputItem(GuiGraphics graphics, int slot, BigItemStack itemSt
mouseX, mouseY);
}

private void renderInputItem(GuiGraphics graphics, int slot, BigItemStack itemStack, int mouseX, int mouseY){
renderInputItem(graphics,slot,itemStack,mouseX,mouseY,0);
}

private void showAddressBoxTooltip(GuiGraphics graphics, int mouseX, int mouseY) {
if (addressBox.getValue()
.isBlank()) {
Expand Down Expand Up @@ -601,33 +608,42 @@ public boolean mouseScrolled(double mouseX, double mouseY, double scrollX, doubl
if (addressBox.mouseScrolled(mouseX, mouseY, scrollX, scrollY))
return true;

if (craftingActive)
return super.mouseScrolled(mouseX, mouseY, scrollX, scrollY);

for (int i = 0; i < inputConfig.size(); i++) {
int inputX = x + 68 + (i % 3 * 20);
int inputY = y + 26 + (i / 3 * 20);
if (mouseX >= inputX && mouseX < inputX + 16 && mouseY >= inputY && mouseY < inputY + 16) {
BigItemStack itemStack = inputConfig.get(i);
if (itemStack.stack.isEmpty())
if (craftingActive){
if (!restocker) {
int outputX = x + 160;
int outputY = y + 48;
if (mouseX >= outputX && mouseX < outputX + 16 && mouseY >= outputY && mouseY < outputY + 16) {
craft_time = Mth.clamp((int) (craft_time + Math.signum(scrollY) * (hasShiftDown() ? 10 : 1)), 1, 64);
return true;
itemStack.count =
Mth.clamp((int) (itemStack.count + Math.signum(scrollY) * (hasShiftDown() ? 10 : 1)), 1, 64);
return true;
}
}
}
else {

if (!restocker) {
int outputX = x + 160;
int outputY = y + 48;
if (mouseX >= outputX && mouseX < outputX + 16 && mouseY >= outputY && mouseY < outputY + 16) {
BigItemStack itemStack = outputConfig;
itemStack.count =
Mth.clamp((int) (itemStack.count + Math.signum(scrollY) * (hasShiftDown() ? 10 : 1)), 1, 64);
return true;
for (int i = 0; i < inputConfig.size(); i++) {
int inputX = x + 68 + (i % 3 * 20);
int inputY = y + 26 + (i / 3 * 20);
if (mouseX >= inputX && mouseX < inputX + 16 && mouseY >= inputY && mouseY < inputY + 16) {
BigItemStack itemStack = inputConfig.get(i);
if (itemStack.stack.isEmpty())
return true;
itemStack.count =
Mth.clamp((int) (itemStack.count + Math.signum(scrollY) * (hasShiftDown() ? 10 : 1)), 1, 64);
return true;
}
}
}

if (!restocker) {
int outputX = x + 160;
int outputY = y + 48;
if (mouseX >= outputX && mouseX < outputX + 16 && mouseY >= outputY && mouseY < outputY + 16) {
BigItemStack itemStack = outputConfig;
itemStack.count =
Mth.clamp((int) (itemStack.count + Math.signum(scrollY) * (hasShiftDown() ? 10 : 1)), 1, 64);
return true;
}
}
}
return super.mouseScrolled(mouseX, mouseY, scrollX, scrollY);
}

Expand Down Expand Up @@ -658,7 +674,7 @@ private void sendIt(@Nullable FactoryPanelPosition toRemove, boolean clearPromis
String address = addressBox.getValue();

FactoryPanelConfigurationPacket packet = new FactoryPanelConfigurationPacket(pos, address, inputs,
craftingArrangement, outputConfig.count, promiseExp, toRemove, clearPromises, sendReset, sendRedstoneReset);
craftingArrangement, outputConfig.count, promiseExp, toRemove, clearPromises, sendReset, sendRedstoneReset, craft_time);
CatnipServices.NETWORK.sendToServer(packet);
}

Expand Down