Skip to content

Commit

Permalink
Add energy requirements and fix some bugs.
Browse files Browse the repository at this point in the history
MartinSVK12 committed Jan 17, 2025

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
1 parent f148d4f commit 848f20c
Showing 11 changed files with 61 additions and 112 deletions.
Original file line number Diff line number Diff line change
@@ -61,6 +61,9 @@ protected void drawSlot(int i, int j, int k, int l, Tessellator tessellator) {
} else if (parent.calculationResult.getType() == CalculationResultType.NO_RECIPE) {
this.parent.drawString(this.parent.fontRenderer, "Can't craft!", j + 2, k + 2, 0xFFFF0000);
this.parent.drawString(this.parent.fontRenderer, "Uncraftable item.", j + 2, k + 12, 0xFFFF8080);
} else if(parent.calculationResult.getType() == CalculationResultType.ERROR) {
this.parent.drawString(this.parent.fontRenderer, "Error occurred!", j + 2, k + 2, 0xFFFF0000);
this.parent.drawString(this.parent.fontRenderer, "Request cannot be fulfilled.", j + 2, k + 2, 0xFFFF8080);
} else {
List<Pair<ItemStack, String>> list = parent.calculationResult.getCraftingPreviewInfo().toList();
Pair<ItemStack, String> pair = list.get(i);
Original file line number Diff line number Diff line change
@@ -205,6 +205,7 @@ public void drawAfterSlotAndButtonRendering(int mouseX, int mouseY, float partia
if (F1.getType() == GuiTextField.class) {
try {
GuiTextField field = ((GuiTextField) F1.get(null));
if(field == null) throw new IllegalAccessException();
String text = field.getText();
query = SearchQuery.resolve(text);
} catch (IllegalAccessException ignored) {
Original file line number Diff line number Diff line change
@@ -23,20 +23,47 @@
import java.util.*;
import java.util.stream.Collectors;

//TODO: energy usage
public class TileEntityDigitalController extends TileEntityNetworkDevice implements INetworkController {

public ArrayDeque<CraftingTask> requestQueue = new ArrayDeque<>();
public ArrayList<CraftingTask> currentTasks = new ArrayList<>();

public TileEntityEnergyAcceptor externalEnergy;

public double energy = 0;
public boolean active = false;

public TileEntityDigitalController() {
}

@Override
public boolean isActive() {
return active;
}

@Override
public void tick() {
super.tick();
externalEnergy = getConnectedTileEntity(TileEntityEnergyAcceptor.class);
processCraftingTasks();
if (externalEnergy != null) {
int draw = getEnergyConsumption();
if(externalEnergy.getEnergy() >= draw){
externalEnergy.internalRemoveEnergy(draw);
active = true;
} else {
active = false;
}
} else {
active = false;
}
if(active){
processCraftingTasks();
}
}

@Override
public int getEnergyConsumption() {
return getAttachedFluidStorage().size() + getAttachedStorage().size() + getProcessors().size() + getCoprocessors().size();
}

@Override
@@ -256,11 +283,6 @@ public void writeToNBT(CompoundTag CompoundTag) {
CompoundTag.put("Energy", nbt);
}

public double energy = 0;

public TileEntityEnergyAcceptor externalEnergy;


@Override
public long getItemCapacity() {
return getAttachedStorage().stream().mapToLong(INetworkItemStorage::getItemCapacity).sum();
Original file line number Diff line number Diff line change
@@ -184,40 +184,6 @@ public void setPriority(int priority) {
this.priority = priority;
}

/*@Override
public boolean add(ItemStack stack) {
ArrayList<ItemStack> list = new ArrayList<>(getStacks());
if (stack == null || DiscManipulator.canSaveAllToDiscs(discsUsed,list)) {
return false;
}
stack = stack.copy();
int index = find(stack.itemID, stack.getMetadata(), stack.getData());
if (index != -1) {
ItemStack invStack = list.get(index);
if (!invStack.getData().equals(stack.getData())) {
index = -1;
}
}
if (index != -1) {
if (getAmount() + stack.stackSize <= getItemCapacity()) {
ItemStack invStack = list.get(index);
invStack.stackSize += stack.stackSize;
DiscManipulator.saveToDiscs(discsUsed,list);
inventoryChanged();
return true;
}
} else {
if (getAmount() + stack.stackSize <= getItemCapacity() && getStackAmount() + 1 <= getStackCapacity()) {
((UnlimitedItemStack) (Object) stack).setUnlimited(true);
list.add(stack);
DiscManipulator.saveToDiscs(discsUsed,list);
inventoryChanged();
return true;
}
}
return false;
}*/

@Override
public ItemStack add(ItemStack stack) {
ArrayList<ItemStack> list = new ArrayList<>(getStacks());
@@ -312,61 +278,6 @@ public ItemStack add(int index, ItemStack stack) {
return Collections.unmodifiableList(Catalyst.condenseItemList(newStacks));
}

/*@Override
public boolean addAll(ItemStackList stacks) {
boolean allSuccessful = true;
ArrayList<ItemStack> toRemove = new ArrayList<>();
for (ItemStack stack : stacks) {
boolean success = add(stack);
if (!success) {
allSuccessful = false;
continue;
}
toRemove.add(stack);
}
for (ItemStack stack : toRemove) {
ItemStack removed = stacks.remove(stack.itemID, stack.getMetadata(), false, true);
if (removed == null) {
allSuccessful = false;
}
}
return allSuccessful;
}
@Override
public boolean addAll(List<ItemStack> stacks) {
boolean allSuccessful = true;
ArrayList<ItemStack> toRemove = new ArrayList<>();
for (ItemStack stack : stacks) {
boolean success = add(stack);
if (!success) {
allSuccessful = false;
}
toRemove.add(stack);
}
for (ItemStack stack : toRemove) {
stacks.remove(stack);
}
return allSuccessful;
}
@Override
public boolean canAdd(ItemStack stack) {
List<ItemStack> list = getStacks();
int index = find(stack.itemID, stack.getMetadata(), stack.getData());
if (index != -1) {
ItemStack invStack = list.get(index);
if (!invStack.getData().equals(stack.getData())) {
index = -1;
}
}
if (index != -1) {
return getAmount() + stack.stackSize <= getItemCapacity();
} else {
return getAmount() + stack.stackSize <= getItemCapacity() && getStackAmount() + 1 <= getStackCapacity();
}
}*/

@Override
public long getItemCapacity() {
return maxItems;
@@ -595,7 +506,7 @@ public int find(int id, int meta, CompoundTag data) {
List<ItemStack> list = getStacks();
for (int i = 0; i < list.size(); i++) {
ItemStack content = list.get(i);
if (content.getMetadata() == meta && content.itemID == id) {
if ((content.getMetadata() == meta || meta == -1) && content.itemID == id) {
if(content.getData().equals(data) || data == null) {
return i;
}
Original file line number Diff line number Diff line change
@@ -52,7 +52,13 @@ public void removedFromNetwork(Network network) {
}

public INetworkController getController() {
return network != null ? network.findFirst(getPosition(),INetworkController.class) : null;
if(network != null) {
INetworkController controller = network.findFirst(getPosition(), INetworkController.class);
if(controller != null) {
return controller.isActive() ? controller : null;
}
}
return null;
}

public HashMap<Direction, TileEntity> getConnectedTileEntity(ArrayList<Class<?>> allowedTileList) {
Original file line number Diff line number Diff line change
@@ -67,6 +67,7 @@ public FluidStack add(int index, FluidStack stack) {

@Override
public int getMaxFluidAmount() {
if(connected == null) return 0;
int n = 0;
for (int i = 0; i < connected.getFluidInventorySize(); i++) {
n += connected.getFluidCapacityForSlot(i);
@@ -76,6 +77,7 @@ public int getMaxFluidAmount() {

@Override
public int getMaxFluidStackSize() {
if(connected == null) return 0;
return connected.getFluidInventorySize();
}

Original file line number Diff line number Diff line change
@@ -13,8 +13,8 @@ public class FluidStackList implements IFluidStackList, Iterable<FluidStack> {
private final int maxFluidAmount;
private final int maxFluidStackSize;

public FluidStackList(ArrayList<FluidStack> contents) {
this.contents = contents;
public FluidStackList(List<FluidStack> contents) {
this.contents = new ArrayList<>(contents);
this.maxFluidAmount = Integer.MAX_VALUE;
this.maxFluidStackSize = Integer.MAX_VALUE;
}
@@ -171,7 +171,7 @@ public FluidStack remove(int slot, boolean strict) {
ArrayList<FluidStack> leftovers = new ArrayList<>();

for (FluidStack stack : what) {
FluidStack removed = remove(stack.liquid.id,stack.amount,strict);
FluidStack removed = removeById(stack.liquid.id,stack.amount,strict);
if (removed == null) {
leftovers.add(stack);
continue;
Original file line number Diff line number Diff line change
@@ -17,7 +17,7 @@

public class GuiRenderDigitalItem extends Gui {

Minecraft mc;
public Minecraft mc;

public GuiRenderDigitalItem(Minecraft mc) {
this.mc = mc;
Original file line number Diff line number Diff line change
@@ -12,6 +12,10 @@
import java.util.*;

public interface INetworkController {
boolean isActive();

int getEnergyConsumption();

ArrayDeque<CraftingTask> getRequestQueue();

ArrayList<CraftingTask> getCurrentTasks();
Original file line number Diff line number Diff line change
@@ -48,7 +48,7 @@ public CalculationResult calculate() {
ItemStackList results = new ItemStackList();
FluidStackList fluidResults = new FluidStackList();
ItemStackList source = new ItemStackList(network.getAllItems());
FluidStackList fluidSource = new FluidStackList();//network.fluidInventory.toList();
FluidStackList fluidSource = new FluidStackList(network.getAllFluids());

int qtyPerCraft = qtyPerCraft(requested);
int qty = ((quantity - 1) / qtyPerCraft) + 1;
Original file line number Diff line number Diff line change
@@ -16,10 +16,10 @@ public class CraftingPreviewInfo {
private final ItemStackList toTake = new ItemStackList();
private final FluidStackList toTakeFluids = new FluidStackList();

private final List<ItemStack> toCraft = new ArrayList<>();
private final List<FluidStack> toCraftFluids = new ArrayList<>();
private final List<ItemStack> toProcess = new ArrayList<>();
private final List<FluidStack> toProcessFluids = new ArrayList<>();
private final ItemStackList toCraft = new ItemStackList();
private final FluidStackList toCraftFluids = new FluidStackList();
private final ItemStackList toProcess = new ItemStackList();
private final FluidStackList toProcessFluids = new FluidStackList();

public ItemStackList getMissing() {
return missing;
@@ -33,11 +33,11 @@ public ItemStackList getToTake() {
return toTake;
}

public List<ItemStack> getToCraft() {
public ItemStackList getToCraft() {
return toCraft;
}

public List<ItemStack> getToProcess() {
public ItemStackList getToProcess() {
return toProcess;
}

@@ -49,18 +49,18 @@ public FluidStackList getToTakeFluids() {
return toTakeFluids;
}

public List<FluidStack> getToCraftFluids() {
public FluidStackList getToCraftFluids() {
return toCraftFluids;
}

public List<FluidStack> getToProcessFluids() {
public FluidStackList getToProcessFluids() {
return toProcessFluids;
}

private List<Pair<ItemStack, String>> listCache = new ArrayList<>();

public int size() {
return (int) (missing.getStackAmount() + missingFluids.getFluidStackAmount() + toTake.getStackAmount() + toTakeFluids.getFluidStackAmount() + toCraft.size() + toCraftFluids.size() + toProcess.size() + toProcessFluids.size());
return (int) (missing.getStackAmount() + missingFluids.getFluidStackAmount() + toTake.getStackAmount() + toTakeFluids.getFluidStackAmount() + toCraft.getStackAmount() + toCraftFluids.getFluidStackAmount() + toProcess.getStackAmount() + toProcessFluids.getFluidStackAmount());
}

public List<Pair<ItemStack, String>> toList() {

0 comments on commit 848f20c

Please sign in to comment.