mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
Merge branch 'HbmMods:master' into master
This commit is contained in:
commit
86a805bd92
@ -32,4 +32,6 @@
|
||||
* Fixed all missing texture errors that appear in the startup log
|
||||
* Potentially fixed a crash with mekanism during the recipe change phase
|
||||
* Removed the coke to heavy oil recipe for allowing infinite oil loops
|
||||
* Coke to syngas and coalgas recipes should be fine though, so they stay
|
||||
* Coke to syngas and coalgas recipes should be fine though, so they stay
|
||||
* Potentially fixed another issue regarding NPCs firing belt-fed guns
|
||||
* Chunk-loading drones may or may not be fixed
|
||||
@ -1,7 +1,6 @@
|
||||
package api.hbm.energymk2;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
@ -154,14 +153,4 @@ public class PowerNetMK2 extends NodeNet<IEnergyReceiverMK2, IEnergyProviderMK2,
|
||||
|
||||
return power - energyUsed;
|
||||
}
|
||||
|
||||
public static final ReceiverComparator COMP = new ReceiverComparator();
|
||||
|
||||
public static class ReceiverComparator implements Comparator<IEnergyReceiverMK2> {
|
||||
|
||||
@Override
|
||||
public int compare(IEnergyReceiverMK2 o1, IEnergyReceiverMK2 o2) {
|
||||
return o2.getPriority().ordinal() - o1.getPriority().ordinal();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,13 +1,93 @@
|
||||
package api.hbm.fluidmk2;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import com.hbm.inventory.fluid.FluidType;
|
||||
import com.hbm.uninos.NodeNet;
|
||||
import com.hbm.util.Tuple.Pair;
|
||||
|
||||
import api.hbm.energymk2.IEnergyReceiverMK2.ConnectionPriority;
|
||||
|
||||
public class FluidNetMK2 extends NodeNet<IFluidReceiverMK2, IFluidProviderMK2, FluidNode> {
|
||||
|
||||
public long fluidTracker = 0L;
|
||||
|
||||
protected static int timeout = 3_000;
|
||||
protected static long currentTime = 0;
|
||||
protected FluidType type;
|
||||
|
||||
public FluidNetMK2(FluidType type) {
|
||||
this.type = type;
|
||||
for(int i = 0; i < IFluidUserMK2.HIGHEST_VALID_PRESSURE + 1; i++) providers[i] = new ArrayList();
|
||||
for(int i = 0; i < IFluidUserMK2.HIGHEST_VALID_PRESSURE + 1; i++) for(int j = 0; j < ConnectionPriority.values().length; j++) receivers[i][j] = new ArrayList();
|
||||
}
|
||||
|
||||
@Override public void resetTrackers() { this.fluidTracker = 0; }
|
||||
|
||||
@Override
|
||||
public void update() {
|
||||
|
||||
if(providerEntries.isEmpty()) return;
|
||||
if(receiverEntries.isEmpty()) return;
|
||||
currentTime = System.currentTimeMillis();
|
||||
|
||||
setupFluidProviders();
|
||||
setupFluidReceivers();
|
||||
|
||||
cleanUp();
|
||||
}
|
||||
|
||||
//this sucks ass, but it makes the code just a smidge more structured
|
||||
public long[] fluidAvailable = new long[IFluidUserMK2.HIGHEST_VALID_PRESSURE + 1];
|
||||
public List<Pair<IFluidProviderMK2, Long>>[] providers = new ArrayList[IFluidUserMK2.HIGHEST_VALID_PRESSURE + 1];
|
||||
public long[][] fluidDemand = new long[IFluidUserMK2.HIGHEST_VALID_PRESSURE + 1][ConnectionPriority.values().length];
|
||||
public List<Pair<IFluidReceiverMK2, Long>>[][] receivers = new ArrayList[IFluidUserMK2.HIGHEST_VALID_PRESSURE + 1][ConnectionPriority.values().length];
|
||||
|
||||
public void setupFluidProviders() {
|
||||
Iterator<Entry<IFluidProviderMK2, Long>> iterator = providerEntries.entrySet().iterator();
|
||||
|
||||
while(iterator.hasNext()) {
|
||||
Entry<IFluidProviderMK2, Long> entry = iterator.next();
|
||||
if(currentTime - entry.getValue() > timeout) { iterator.remove(); continue; }
|
||||
IFluidProviderMK2 provider = entry.getKey();
|
||||
int[] pressureRange = provider.getProvidingPressureRange(type);
|
||||
for(int p = pressureRange[0]; p <= pressureRange[1]; p++) {
|
||||
long available = Math.min(provider.getFluidAvailable(type, p), provider.getProviderSpeed(type, p));
|
||||
providers[p].add(new Pair(provider, available));
|
||||
fluidAvailable[p] += available;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void setupFluidReceivers() {
|
||||
Iterator<Entry<IFluidReceiverMK2, Long>> iterator = receiverEntries.entrySet().iterator();
|
||||
|
||||
while(iterator.hasNext()) {
|
||||
Entry<IFluidReceiverMK2, Long> entry = iterator.next();
|
||||
if(currentTime - entry.getValue() > timeout) { iterator.remove(); continue; }
|
||||
IFluidReceiverMK2 receiver = entry.getKey();
|
||||
int[] pressureRange = receiver.getReceivingPressureRange(type);
|
||||
for(int p = pressureRange[0]; p <= pressureRange[1]; p++) {
|
||||
long required = Math.min(receiver.getDemand(type, p), receiver.getReceiverSpeed(type, p));
|
||||
int priority = receiver.getFluidPriority().ordinal();
|
||||
receivers[p][priority].add(new Pair(receiver, required));
|
||||
fluidDemand[p][priority] += required;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void cleanUp() {
|
||||
for(int i = 0; i < IFluidUserMK2.HIGHEST_VALID_PRESSURE + 1; i++) {
|
||||
fluidAvailable[i] = 0;
|
||||
providers[i].clear();
|
||||
|
||||
for(int j = 0; j < ConnectionPriority.values().length; j++) {
|
||||
fluidDemand[i][j] = 0;
|
||||
receivers[i][j].clear();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -7,4 +7,6 @@ public interface IFluidProviderMK2 extends IFluidUserMK2 {
|
||||
public void useUpFluid(FluidType type, int pressure, long amount);
|
||||
public default long getProviderSpeed(FluidType type, int pressure) { return 1_000_000_000; }
|
||||
public long getFluidAvailable(FluidType type, int pressure);
|
||||
|
||||
public default int[] getProvidingPressureRange(FluidType type) { return DEFAULT_PRESSURE_RANGE; }
|
||||
}
|
||||
|
||||
@ -22,6 +22,8 @@ public interface IFluidReceiverMK2 extends IFluidUserMK2 {
|
||||
public default long getReceiverSpeed(FluidType type, int pressure) { return 1_000_000_000; }
|
||||
public long getDemand(FluidType type, int pressure);
|
||||
|
||||
public default int[] getReceivingPressureRange(FluidType type) { return DEFAULT_PRESSURE_RANGE; }
|
||||
|
||||
public default void trySubscribe(FluidType type, World world, DirPos pos) { trySubscribe(type, world, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); }
|
||||
|
||||
public default void trySubscribe(FluidType type, World world, int x, int y, int z, ForgeDirection dir) {
|
||||
|
||||
@ -46,6 +46,21 @@ public interface IFluidStandardReceiverMK2 extends IFluidReceiverMK2 {
|
||||
return amount;
|
||||
}
|
||||
|
||||
@Override
|
||||
public default int[] getReceivingPressureRange(FluidType type) {
|
||||
int lowest = HIGHEST_VALID_PRESSURE;
|
||||
int highest = 0;
|
||||
|
||||
for(FluidTank tank : getReceivingTanks()) {
|
||||
if(tank.getTankType() == type) {
|
||||
if(tank.getPressure() < lowest) lowest = tank.getPressure();
|
||||
if(tank.getPressure() > highest) highest = tank.getPressure();
|
||||
}
|
||||
}
|
||||
|
||||
return lowest <= highest ? new int[] {lowest, highest} : DEFAULT_PRESSURE_RANGE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public default long getReceiverSpeed(FluidType type, int pressure) {
|
||||
return 1_000_000_000;
|
||||
|
||||
@ -108,6 +108,21 @@ public interface IFluidStandardSenderMK2 extends IFluidProviderMK2 {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public default int[] getProvidingPressureRange(FluidType type) {
|
||||
int lowest = HIGHEST_VALID_PRESSURE;
|
||||
int highest = 0;
|
||||
|
||||
for(FluidTank tank : getSendingTanks()) {
|
||||
if(tank.getTankType() == type) {
|
||||
if(tank.getPressure() < lowest) lowest = tank.getPressure();
|
||||
if(tank.getPressure() > highest) highest = tank.getPressure();
|
||||
}
|
||||
}
|
||||
|
||||
return lowest <= highest ? new int[] {lowest, highest} : DEFAULT_PRESSURE_RANGE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public default long getProviderSpeed(FluidType type, int pressure) {
|
||||
return 1_000_000_000;
|
||||
|
||||
@ -4,6 +4,9 @@ import com.hbm.inventory.fluid.tank.FluidTank;
|
||||
|
||||
public interface IFluidUserMK2 extends IFluidConnectorMK2 {
|
||||
|
||||
public static final int HIGHEST_VALID_PRESSURE = 5;
|
||||
public static final int[] DEFAULT_PRESSURE_RANGE = new int[] {0, 0};
|
||||
|
||||
public static final boolean particleDebug = false;
|
||||
|
||||
public FluidTank[] getAllTanks();
|
||||
|
||||
@ -256,7 +256,7 @@ public class FluidType {
|
||||
return this.stringId;
|
||||
}
|
||||
|
||||
protected INetworkProvider<FluidNetMK2> NETWORK_PROVIDER = new FluidNetProvider();
|
||||
protected INetworkProvider<FluidNetMK2> NETWORK_PROVIDER = new FluidNetProvider(this);
|
||||
|
||||
public INetworkProvider<FluidNetMK2> getNetworkProvider() {
|
||||
return NETWORK_PROVIDER;
|
||||
|
||||
@ -28,6 +28,7 @@ public class MagazineBelt implements IMagazine<BulletConfig> {
|
||||
|
||||
@Override
|
||||
public void useUpAmmo(ItemStack stack, IInventory inventory, int amount) {
|
||||
if(inventory == null) return;
|
||||
|
||||
BulletConfig first = this.getFirstConfig(stack, inventory);
|
||||
|
||||
|
||||
@ -1,13 +1,20 @@
|
||||
package com.hbm.uninos.networkproviders;
|
||||
|
||||
import com.hbm.inventory.fluid.FluidType;
|
||||
import com.hbm.uninos.INetworkProvider;
|
||||
|
||||
import api.hbm.fluidmk2.FluidNetMK2;
|
||||
|
||||
public class FluidNetProvider implements INetworkProvider<FluidNetMK2> {
|
||||
|
||||
protected FluidType type;
|
||||
|
||||
public FluidNetProvider(FluidType type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
@Override
|
||||
public FluidNetMK2 provideNetwork() {
|
||||
return new FluidNetMK2();
|
||||
return new FluidNetMK2(type);
|
||||
}
|
||||
}
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 6.6 KiB |
Loading…
x
Reference in New Issue
Block a user