Skip to content

Commit

Permalink
replace EXTRA in distribution logic with RESOURCE and amount
Browse files Browse the repository at this point in the history
  • Loading branch information
thiakil committed Aug 31, 2024
1 parent 98a2579 commit 4fb8baa
Show file tree
Hide file tree
Showing 16 changed files with 100 additions and 101 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -322,47 +322,51 @@ public void accept(IStrictEnergyHandler handler) {

private static class SendingFluidHandlerTarget extends FluidHandlerTarget implements Runnable, Consumer<IFluidHandler> {

private final FluidStack toSend;
private final IExtendedFluidTank storedFluid;

public SendingFluidHandlerTarget(@NotNull FluidStack toSend, int expectedSize, IExtendedFluidTank storedFluid) {
super(toSend, expectedSize);
super(expectedSize);
this.toSend = toSend;
this.storedFluid = storedFluid;
}

@Override
public void run() {
if (getHandlerCount() > 0) {
storedFluid.extract(EmitUtils.sendToAcceptors(this, extra.getAmount(), extra), Action.EXECUTE, AutomationType.INTERNAL);
storedFluid.extract(EmitUtils.sendToAcceptors(this, toSend.getAmount(), toSend), Action.EXECUTE, AutomationType.INTERNAL);
}
}

@Override
public void accept(IFluidHandler handler) {
if (FluidUtils.canFill(handler, extra)) {
if (FluidUtils.canFill(handler, toSend)) {
addHandler(handler);
}
}
}

private static class SendingChemicalHandlerTarget extends ChemicalHandlerTarget implements Runnable, Consumer<IChemicalHandler> {

private final ChemicalStack toSend;
private final IChemicalTank storedChemical;

public SendingChemicalHandlerTarget(ChemicalStack toSend, int expectedSize, IChemicalTank storedChemical) {
super(toSend, expectedSize);
super(expectedSize);
this.toSend = toSend;
this.storedChemical = storedChemical;
}

@Override
public void run() {
if (getHandlerCount() > 0) {
storedChemical.extract(EmitUtils.sendToAcceptors(this, extra.getAmount(), extra), Action.EXECUTE, AutomationType.INTERNAL);
storedChemical.extract(EmitUtils.sendToAcceptors(this, toSend.getAmount(), toSend), Action.EXECUTE, AutomationType.INTERNAL);
}
}

@Override
public void accept(IChemicalHandler handler) {
if (ChemicalUtil.canInsert(handler, extra)) {
if (ChemicalUtil.canInsert(handler, toSend)) {
addHandler(handler);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,7 @@ protected void updateSaveShares(@Nullable PressurizedTube triggerTransmitter) {
}

private void updateSaveShares(@Nullable PressurizedTube triggerTransmitter, ChemicalStack chemical) {
ChemicalTransmitterSaveTarget saveTarget = new ChemicalTransmitterSaveTarget(chemical, getTransmitters());
ChemicalTransmitterSaveTarget saveTarget = new ChemicalTransmitterSaveTarget(getTransmitters());
long sent = EmitUtils.sendToAcceptors(saveTarget, chemical.getAmount(), chemical);
if (triggerTransmitter != null && sent < chemical.getAmount()) {
disperse(triggerTransmitter, chemical.copyWithAmount(chemical.getAmount() - sent));
Expand Down Expand Up @@ -173,7 +173,7 @@ private long tickEmit(@NotNull ChemicalStack stack) {
if (ChemicalUtil.canInsert(handler, stack)) {
if (target == null) {
//Lazily initialize the target, which allows us to also skip attempting to start emitting
target = new ChemicalHandlerTarget(stack, acceptorValues.size() * 2);
target = new ChemicalHandlerTarget(acceptorValues.size() * 2);
}
target.addHandler(handler);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ protected void updateSaveShares(@Nullable MechanicalPipe triggerTransmitter) {
super.updateSaveShares(triggerTransmitter);
if (!isEmpty()) {
FluidStack fluidType = fluidTank.getFluid();
FluidTransmitterSaveTarget saveTarget = new FluidTransmitterSaveTarget(fluidType, getTransmitters());
FluidTransmitterSaveTarget saveTarget = new FluidTransmitterSaveTarget(getTransmitters());
EmitUtils.sendToAcceptors(saveTarget, fluidType.getAmount(), fluidType);
saveTarget.saveShare();
}
Expand All @@ -157,7 +157,7 @@ private int tickEmit(@NotNull FluidStack fluidToSend) {
if (FluidUtils.canFill(acceptor, fluidToSend)) {
if (target == null) {
//Lazily initialize the target, which allows us to also skip attempting to start emitting
target = new FluidHandlerTarget(fluidToSend, acceptorValues.size() * 2);
target = new FluidHandlerTarget(acceptorValues.size() * 2);
}
target.addHandler(acceptor);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,22 +8,20 @@

public class ChemicalHandlerTarget extends Target<IChemicalHandler, ChemicalStack> {

public ChemicalHandlerTarget(ChemicalStack type) {
this.extra = type;
public ChemicalHandlerTarget() {
}

public ChemicalHandlerTarget(ChemicalStack type, int expectedSize) {
public ChemicalHandlerTarget(int expectedSize) {
super(expectedSize);
this.extra = type;
}

@Override
protected void acceptAmount(IChemicalHandler handler, SplitInfo splitInfo, long amount) {
splitInfo.send(amount - handler.insertChemical(extra.copyWithAmount(amount), Action.EXECUTE).getAmount());
protected void acceptAmount(IChemicalHandler handler, SplitInfo splitInfo, ChemicalStack resource, long amount) {
splitInfo.send(amount - handler.insertChemical(resource.copyWithAmount(amount), Action.EXECUTE).getAmount());
}

@Override
protected long simulate(IChemicalHandler handler, ChemicalStack stack) {
return stack.getAmount() - handler.insertChemical(stack, Action.SIMULATE).getAmount();
protected long simulate(IChemicalHandler handler, ChemicalStack resource, long amount) {
return resource.getAmount() - handler.insertChemical(resource.copyWithAmount(amount), Action.SIMULATE).getAmount();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,22 +8,21 @@

public class ChemicalTransmitterSaveTarget extends Target<ChemicalTransmitterSaveTarget.SaveHandler, ChemicalStack> {

public ChemicalTransmitterSaveTarget(ChemicalStack type, Collection<PressurizedTube> transmitters) {
public ChemicalTransmitterSaveTarget(Collection<PressurizedTube> transmitters) {
super(transmitters.size());
this.extra = type;
for (PressurizedTube transmitter : transmitters) {
addHandler(new SaveHandler(transmitter));
}
}

@Override
protected void acceptAmount(ChemicalTransmitterSaveTarget.SaveHandler handler, SplitInfo splitInfo, long amount) {
handler.acceptAmount(splitInfo, amount);
protected void acceptAmount(SaveHandler handler, SplitInfo splitInfo, ChemicalStack resource, long amount) {
handler.acceptAmount(splitInfo, resource, amount);
}

@Override
protected long simulate(ChemicalTransmitterSaveTarget.SaveHandler handler, ChemicalStack chemicalStack) {
return handler.simulate(chemicalStack);
protected long simulate(SaveHandler handler, ChemicalStack resource, long amount) {
return handler.simulate(resource.copyWithAmount(amount));
}

public void saveShare() {
Expand All @@ -32,7 +31,8 @@ public void saveShare() {
}
}

public class SaveHandler {
//todo implement this on the transmitter with slightly different names?
public static class SaveHandler {

private ChemicalStack currentStored;
private final PressurizedTube transmitter;
Expand All @@ -42,10 +42,10 @@ public SaveHandler(PressurizedTube transmitter) {
this.transmitter = transmitter;
}

protected void acceptAmount(SplitInfo splitInfo, long amount) {
protected void acceptAmount(SplitInfo splitInfo, ChemicalStack resource, long amount) {
amount = Math.min(amount, transmitter.getCapacity() - currentStored.getAmount());
if (currentStored.isEmpty()) {
currentStored = extra.copyWithAmount(amount);
currentStored = resource.copyWithAmount(amount);
} else {
currentStored.grow(amount);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,12 @@ public EnergyAcceptorTarget(int expectedSize) {
}

@Override
protected void acceptAmount(IStrictEnergyHandler handler, SplitInfo splitInfo, long amount) {
protected void acceptAmount(IStrictEnergyHandler handler, SplitInfo splitInfo, Long resource, long amount) {
splitInfo.send(amount - (handler.insertEnergy(amount, Action.EXECUTE)));
}

@Override
protected long simulate(IStrictEnergyHandler handler, Long energyToSend) {
return energyToSend - (handler.insertEnergy(energyToSend, Action.SIMULATE));
protected long simulate(IStrictEnergyHandler handler, Long resource, long amount) {
return amount - (handler.insertEnergy(amount, Action.SIMULATE));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,13 @@ public EnergySaveTarget(int expectedSize) {
}

@Override
protected void acceptAmount(HANDLER handler, SplitInfo splitInfo, long amount) {
protected void acceptAmount(HANDLER handler, SplitInfo splitInfo, Long resource, long amount) {
handler.acceptAmount(splitInfo, amount);
}

@Override
protected long simulate(HANDLER handler, Long energyToSend) {
return handler.simulate(energyToSend);
protected long simulate(HANDLER handler, Long resource, long amount) {
return handler.simulate(amount);
}

public void save() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,27 +11,24 @@

public class FluidHandlerTarget extends Target<IFluidHandler, @NotNull FluidStack> {

public FluidHandlerTarget(@NotNull FluidStack type) {
this.extra = type;
public FluidHandlerTarget() {
}

public FluidHandlerTarget(@NotNull FluidStack type, Collection<IFluidHandler> allHandlers) {
public FluidHandlerTarget(Collection<IFluidHandler> allHandlers) {
super(allHandlers);
this.extra = type;
}

public FluidHandlerTarget(@NotNull FluidStack type, int expectedSize) {
public FluidHandlerTarget(int expectedSize) {
super(expectedSize);
this.extra = type;
}

@Override
protected void acceptAmount(IFluidHandler handler, SplitInfo splitInfo, long amount) {
splitInfo.send(handler.fill(extra.copyWithAmount(MathUtils.clampToInt(amount)), FluidAction.EXECUTE));
protected void acceptAmount(IFluidHandler handler, SplitInfo splitInfo, @NotNull FluidStack resource, long amount) {
splitInfo.send(handler.fill(resource.copyWithAmount(MathUtils.clampToInt(amount)), FluidAction.EXECUTE));
}

@Override
protected long simulate(IFluidHandler handler, @NotNull FluidStack fluidStack) {
return handler.fill(fluidStack, FluidAction.SIMULATE);
protected long simulate(IFluidHandler handler, @NotNull FluidStack resource, long amount) {
return handler.fill(resource.copyWithAmount(MathUtils.clampToInt(amount)), FluidAction.SIMULATE);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,22 +11,21 @@
//TODO: Improve handling for fluid storage as longs
public class FluidTransmitterSaveTarget extends Target<FluidTransmitterSaveTarget.SaveHandler, @NotNull FluidStack> {

public FluidTransmitterSaveTarget(@NotNull FluidStack type, Collection<MechanicalPipe> transmitters) {
public FluidTransmitterSaveTarget(Collection<MechanicalPipe> transmitters) {
super(transmitters.size());
this.extra = type;
for (MechanicalPipe transmitter : transmitters) {
addHandler(new SaveHandler(transmitter));
}
}

@Override
protected void acceptAmount(FluidTransmitterSaveTarget.SaveHandler handler, SplitInfo splitInfo, long amount) {
handler.acceptAmount(splitInfo, MathUtils.clampToInt(amount));
protected void acceptAmount(SaveHandler handler, SplitInfo splitInfo, @NotNull FluidStack resource, long amount) {
handler.acceptAmount(splitInfo, resource, MathUtils.clampToInt(amount));
}

@Override
protected long simulate(FluidTransmitterSaveTarget.SaveHandler handler, @NotNull FluidStack fluidStack) {
return handler.simulate(fluidStack);
protected long simulate(SaveHandler handler, @NotNull FluidStack resource, long amount) {
return handler.simulate(resource.copyWithAmount(MathUtils.clampToInt(amount)));
}

public void saveShare() {
Expand All @@ -35,7 +34,7 @@ public void saveShare() {
}
}

public class SaveHandler {
public static class SaveHandler {

private FluidStack currentStored = FluidStack.EMPTY;
private final MechanicalPipe transmitter;
Expand All @@ -44,10 +43,10 @@ public SaveHandler(MechanicalPipe transmitter) {
this.transmitter = transmitter;
}

protected void acceptAmount(SplitInfo splitInfo, Integer amount) {
protected void acceptAmount(SplitInfo splitInfo, @NotNull FluidStack resource, int amount) {
amount = Math.min(amount, MathUtils.clampToInt(transmitter.getCapacity() - currentStored.getAmount()));
if (currentStored.isEmpty()) {
currentStored = extra.copyWithAmount(amount);
currentStored = resource.copyWithAmount(amount);
} else {
currentStored.grow(amount);
}
Expand Down
Loading

0 comments on commit 4fb8baa

Please sign in to comment.