-
Notifications
You must be signed in to change notification settings - Fork 1
Open
Description
- 输出通道直接贴着电池箱,不充电
- 输出通道与输入通道方向相同,不充电
- 不满足1和2,正常充电
我看了一下EUP2PTunnelPart的源码,没看懂……所以我自己实现了一个,经过测试,在1和2的情况下也能正常传电。
(因为gradle就是一坨,加载新项目大概率失败,所以我克隆了这个项目也没用,也就开不了PR,直接把代码发到这里,代码量很少,只需要修改1个原有类EUP2PTunnelPart和增加一个新类ForwardingEnergyContainer。)
public class GTEUP2PTunnelPart extends CapabilityP2PTunnelPart<GTEUP2PTunnelPart, IEnergyContainer> {
public GTEUP2PTunnelPart(IPartItem<?> partItem) {
super(partItem, GTCapability.CAPABILITY_ENERGY_CONTAINER);
inputHandler = (ForwardingEnergyContainer<IEnergyContainer>) this::getInputDelegate;
outputHandler = (ForwardingEnergyContainer<IEnergyContainer>) this::getOutputDelegate;
emptyHandler = IEnergyContainer.DEFAULT;
}
public IEnergyContainer getDelegate() {
var location = getHost().getLocation();
var level = location.getLevel();
var pos = location.getPos();
var side = getSide();
var pos1 = pos.relative(side);
return Objects.requireNonNullElse(GTCapabilityHelper.getEnergyContainer(level, pos1, side.getOpposite()), emptyHandler);
}
private IEnergyContainer getOutputDelegate() {
var input = getInput();
return input != null ? input.getDelegate() : emptyHandler;
}
private IEnergyContainer getInputDelegate() {
var outputs = getOutputs();
if (outputs.isEmpty()) {
return emptyHandler;
}
List<IEnergyContainer> delegates = new ObjectArrayList<>(outputs.size());
for (var output : outputs) {
delegates.add(output.getDelegate());
}
return new EnergyContainerList(delegates);
}
}public interface ForwardingEnergyContainer<T extends IEnergyContainer> extends IEnergyContainer {
default long acceptEnergyFromNetwork(Direction side, long voltage, long amperage) {
return getDelegate().acceptEnergyFromNetwork(side, voltage, amperage);
}
default boolean inputsEnergy(Direction side) {
return getDelegate().inputsEnergy(side);
}
default boolean outputsEnergy(Direction side) {
return getDelegate().outputsEnergy(side);
}
default long changeEnergy(long differenceAmount) {
return getDelegate().changeEnergy(differenceAmount);
}
default long addEnergy(long energyToAdd) {
return getDelegate().addEnergy(energyToAdd);
}
default long removeEnergy(long energyToRemove) {
return getDelegate().removeEnergy(energyToRemove);
}
default long getEnergyCanBeInserted() {
return getDelegate().getEnergyCanBeInserted();
}
default long getEnergyStored() {
return getDelegate().getEnergyStored();
}
default long getEnergyCapacity() {
return getDelegate().getEnergyCapacity();
}
default EnergyInfo getEnergyInfo() {
return getDelegate().getEnergyInfo();
}
default boolean supportsBigIntEnergyValues() {
return getDelegate().supportsBigIntEnergyValues();
}
default long getOutputAmperage() {
return getDelegate().getOutputAmperage();
}
default long getOutputVoltage() {
return getDelegate().getOutputVoltage();
}
default long getInputAmperage() {
return getDelegate().getInputAmperage();
}
default long getInputVoltage() {
return getDelegate().getInputVoltage();
}
default long getInputPerSec() {
return getDelegate().getInputPerSec();
}
default long getOutputPerSec() {
return getDelegate().getOutputPerSec();
}
default boolean isOneProbeHidden() {
return getDelegate().isOneProbeHidden();
}
T getDelegate();
}Metadata
Metadata
Assignees
Labels
No labels
