diff --git a/src/main/java/com/ticticboooom/mods/mm/block/tile/MachinePortBlockEntity.java b/src/main/java/com/ticticboooom/mods/mm/block/tile/MachinePortBlockEntity.java index df45623..39ff04c 100644 --- a/src/main/java/com/ticticboooom/mods/mm/block/tile/MachinePortBlockEntity.java +++ b/src/main/java/com/ticticboooom/mods/mm/block/tile/MachinePortBlockEntity.java @@ -18,6 +18,8 @@ import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.StringTextComponent; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.util.LazyOptional; +import vazkii.botania.api.mana.IManaBlock; +import vazkii.botania.api.mana.IManaPool; import vazkii.botania.api.mana.IManaReceiver; import javax.annotation.Nonnull; @@ -93,13 +95,24 @@ public class MachinePortBlockEntity extends UpdatableTile implements ITickableTi public void receiveMana(int mana) { if (storage instanceof ManaPortStorage) { ManaPortStorage s = (ManaPortStorage) storage; - s.getInv().receiveMana(mana, false); + if (this.isInput()) { + s.getInv().receiveMana(mana, false); + } + else { + int tiles = s.getValidPools().size(); + if (tiles != 0) { + int manaForEach = mana / tiles; + for (IManaReceiver pool : s.getValidPools()) { + pool.receiveMana(manaForEach); + } + } + } } } @Override public boolean canReceiveManaFromBursts() { - return true; + return this.isInput(); } @Override diff --git a/src/main/java/com/ticticboooom/mods/mm/ports/storage/ManaPortStorage.java b/src/main/java/com/ticticboooom/mods/mm/ports/storage/ManaPortStorage.java index 03f8d36..479af11 100644 --- a/src/main/java/com/ticticboooom/mods/mm/ports/storage/ManaPortStorage.java +++ b/src/main/java/com/ticticboooom/mods/mm/ports/storage/ManaPortStorage.java @@ -4,6 +4,7 @@ import com.mojang.blaze3d.matrix.MatrixStack; import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; import com.ticticboooom.mods.mm.MM; +import com.ticticboooom.mods.mm.block.tile.MachinePortBlockEntity; import com.ticticboooom.mods.mm.inventory.PortEnergyInventory; import com.ticticboooom.mods.mm.inventory.botania.PortManaInventory; import lombok.Getter; @@ -11,15 +12,25 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.gui.AbstractGui; import net.minecraft.client.gui.screen.Screen; import net.minecraft.nbt.CompoundNBT; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.Direction; import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.energy.CapabilityEnergy; +import vazkii.botania.api.mana.IManaPool; +import vazkii.botania.api.mana.IManaReceiver; + +import java.util.ArrayList; +import java.util.List; public class ManaPortStorage extends PortStorage { public static final Codec CODEC = RecordCodecBuilder.create(x -> x.group( Codec.INT.fieldOf("capacity").forGetter(z -> z.inv.getMaxManaStored()) ).apply(x, ManaPortStorage::new)); + @Getter + private final List validPools = new ArrayList<>(); @Getter private final PortManaInventory inv; @@ -67,4 +78,26 @@ public class ManaPortStorage extends PortStorage { screen.blit(stack, left + barOffsetX, top + barOffsetY, 193, 18, 18, (int) (108 * amount)); AbstractGui.drawString(stack, Minecraft.getInstance().fontRenderer, inv.getManaStored() + "Mana", left + 30, top + 60, 0xfefefe); } + + @Override + public void tick(MachinePortBlockEntity tile) { + if (tile.getWorld().isRemote) { + return; + } + validPools.clear(); + for (Direction dir : Direction.Plane.HORIZONTAL) { + BlockPos pos = tile.getPos().offset(dir); + if (tile.getWorld().isBlockLoaded(pos)) { + TileEntity tileAt = tile.getWorld().getTileEntity(pos); + if (tileAt instanceof IManaPool && !tileAt.isRemoved()) { + IManaReceiver receiver = (IManaReceiver) tileAt; + if (!receiver.isFull()) { + validPools.add(receiver); + } + } + } + } + + super.tick(tile); + } }