minecraft-src/net/minecraft/world/phys/shapes/NonOverlappingMerger.java
2025-07-04 01:41:11 +03:00

56 lines
1.3 KiB
Java

package net.minecraft.world.phys.shapes;
import it.unimi.dsi.fastutil.doubles.AbstractDoubleList;
import it.unimi.dsi.fastutil.doubles.DoubleList;
public class NonOverlappingMerger extends AbstractDoubleList implements IndexMerger {
private final DoubleList lower;
private final DoubleList upper;
private final boolean swap;
protected NonOverlappingMerger(DoubleList lower, DoubleList upper, boolean swap) {
this.lower = lower;
this.upper = upper;
this.swap = swap;
}
@Override
public int size() {
return this.lower.size() + this.upper.size();
}
@Override
public boolean forMergedIndexes(IndexMerger.IndexConsumer consumer) {
return this.swap ? this.forNonSwappedIndexes((i, j, k) -> consumer.merge(j, i, k)) : this.forNonSwappedIndexes(consumer);
}
private boolean forNonSwappedIndexes(IndexMerger.IndexConsumer consumer) {
int i = this.lower.size();
for (int j = 0; j < i; j++) {
if (!consumer.merge(j, -1, j)) {
return false;
}
}
int jx = this.upper.size() - 1;
for (int k = 0; k < jx; k++) {
if (!consumer.merge(i - 1, k, i + k)) {
return false;
}
}
return true;
}
@Override
public double getDouble(int i) {
return i < this.lower.size() ? this.lower.getDouble(i) : this.upper.getDouble(i - this.lower.size());
}
@Override
public DoubleList getList() {
return this;
}
}