Skip to content

Commit 90c4e2f

Browse files
committed
fix DT outputs sometimes on wrong layers
1 parent 859bcb9 commit 90c4e2f

File tree

2 files changed

+18
-5
lines changed

2 files changed

+18
-5
lines changed

src/main/java/gregtech/api/metatileentity/multiblock/MultiblockControllerBase.java

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import net.minecraft.tileentity.TileEntity;
2727
import net.minecraft.util.EnumFacing;
2828
import net.minecraft.util.ResourceLocation;
29+
import net.minecraft.util.math.BlockPos;
2930
import net.minecraft.world.World;
3031
import net.minecraftforge.common.capabilities.Capability;
3132
import org.apache.commons.lang3.ArrayUtils;
@@ -35,6 +36,7 @@
3536
import javax.annotation.Nullable;
3637
import java.util.*;
3738
import java.util.function.BiFunction;
39+
import java.util.function.Function;
3840
import java.util.function.Predicate;
3941

4042
public abstract class MultiblockControllerBase extends MetaTileEntity implements IMultiblockController {
@@ -170,14 +172,18 @@ public Pair<TextureAtlasSprite, Integer> getParticleTexture() {
170172
}
171173

172174
/**
173-
* if true allows all hatches to share but energy hatches and rotor holders
174-
* defualt true
175-
*
176-
* @return
175+
* Override to disable MultiblockPart sharing for this Multiblock. (Rotor Holders always disallowed).
177176
*/
178177
public boolean canShare() {
179178
return true;
179+
}
180180

181+
/**
182+
* Used if MultiblockPart Abilities need to be sorted a certain way, like
183+
* Distillation Tower and Assembly Line.
184+
*/
185+
protected Function<BlockPos, Integer> multiblockPartSorter() {
186+
return BlockPos::hashCode;
181187
}
182188

183189
protected void checkStructurePattern() {
@@ -186,7 +192,7 @@ protected void checkStructurePattern() {
186192
if (context != null && !structureFormed) {
187193
Set<IMultiblockPart> rawPartsSet = context.getOrCreate("MultiblockParts", HashSet::new);
188194
ArrayList<IMultiblockPart> parts = new ArrayList<>(rawPartsSet);
189-
parts.sort(Comparator.comparing(it -> ((MetaTileEntity) it).getPos().hashCode()));
195+
parts.sort(Comparator.comparing(it -> multiblockPartSorter().apply(((MetaTileEntity) it).getPos())));
190196
for (IMultiblockPart part : parts) {
191197
if (part.isAttachedToMultiBlock()) {
192198
if (!canShare() || part instanceof MetaTileEntityRotorHolder) {

src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityDistillationTower.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,14 @@
1717
import gregtech.common.blocks.MetaBlocks;
1818
import net.minecraft.block.state.IBlockState;
1919
import net.minecraft.util.ResourceLocation;
20+
import net.minecraft.util.math.BlockPos;
2021
import net.minecraft.util.text.ITextComponent;
2122
import net.minecraft.util.text.TextComponentTranslation;
2223
import net.minecraftforge.fluids.FluidStack;
2324

2425
import javax.annotation.Nonnull;
2526
import java.util.List;
27+
import java.util.function.Function;
2628
import java.util.function.Predicate;
2729

2830
import static gregtech.api.util.RelativeDirection.*;
@@ -38,6 +40,11 @@ public MetaTileEntity createMetaTileEntity(MetaTileEntityHolder holder) {
3840
return new MetaTileEntityDistillationTower(metaTileEntityId);
3941
}
4042

43+
@Override
44+
protected Function<BlockPos, Integer> multiblockPartSorter() {
45+
return BlockPos::getY; // todo this needs to be "relative up" with Freedom Wrench
46+
}
47+
4148
@Override
4249
protected void addDisplayText(List<ITextComponent> textList) {
4350
if (isStructureFormed()) {

0 commit comments

Comments
 (0)